Cifre mediante programación el correo electrónico de Outlook con Inspector
Frecuentes
Visto 3,496 veces
2
Uso C# con el modelo de objetos de Outlook (la redención no es una opción para mí debido a la licencia) y tengo dificultades para cifrar mediante programación un mensaje de correo electrónico antes de enviarlo.
Puedo obtener con éxito una referencia al CommandBarButton que supuestamente representa el botón Cifrar (Id 718 según los ejemplos en línea), pero no puedo presionarlo mediante programación. Intenté usar el método CommandBarButton Execute() y SendKeys (no estoy seguro de si sendkeys es válido en este contexto). Todas las declaraciones debug.writeline muestran que el botón está en el estado msoButtonUp.
He estado jugando con esto durante días y parece que no puedo hacerlo funcionar. ¡Cualquier consejo sería muy apreciado!
Outlook.MailItem emailToSend;
...
Microsoft.Office.Core.CommandBarButton cbb = null;
cbb =(CommandBarButton)emailToSend.GetInspector.CommandBars["Standard"].FindControl(Type.Missing, 718, Type.Missing, true, false);
if (cbb != null) {
//it is not null in debugger
if (cbb.Enabled) {
//make sure digital signature is on
cbb.Visible = true;
Debug.WriteLine("State was: " + cbb.State.ToString()); //all debug calls return msoButtonUp
cbb.SetFocus();
SendKeys.SendWait("{ENTER}");
Debug.WriteLine("State was: " + cbb.State.ToString());
SendKeys.SendWait("~");
Debug.WriteLine("State was: " + cbb.State.ToString());
cbb.Execute();
Debug.WriteLine("State was: " + cbb.State.ToString());
}
}
2 Respuestas
2
En realidad, hay una mejor manera de encriptar, firmar, encriptar + firmar mediante programación, o garantizar ninguna de las dos. Y puede hacerlo sin tener que mostrar el elemento de correo. El siguiente artículo muestra cómo, utilizando una propiedad del elemento de correo:
http://support.microsoft.com/kb/2636465?wa=wsignin1.0
Por ejemplo, en C#, si mItem es su elemento de correo, el siguiente código desactivaría la firma y el cifrado:
mItem.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x6E010003", 0);
Respondido 21 ago 13, 23:08
1
Lo descubrí por prueba y error. El problema principal parecía ser que estaba usando el Inspector antes de mostrar MailItem. Agregar la llamada a Display al principio lo resolvió. Para cualquier persona interesada, aquí está el código que funcionó para mí:
private static void addOutlookEncryption(ref Outlook.MailItem mItem) {
CommandBarButton encryptBtn;
mItem.Display(false);
encryptBtn = mItem.GetInspector.CommandBars.FindControl(MsoControlType.msoControlButton, 718, Type.Missing, Type.Missing) as CommandBarButton;
if (encryptBtn == null) {
//if it's null, then add the encryption button
encryptBtn = (CommandBarButton)mItem.GetInspector.CommandBars["Standard"].Controls.Add(Type.Missing, 718, Type.Missing, Type.Missing, true);
}
if (encryptBtn.Enabled) {
if (encryptBtn.State == MsoButtonState.msoButtonUp) {
encryptBtn.Execute();
}
}
mItem.Close(Outlook.OlInspectorClose.olDiscard);
}
contestado el 11 de mayo de 12 a las 19:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# outlook office-interop outlook-addin office-automation or haz tu propia pregunta.
Alguna información adicional: Cuando intento cbb.State = MsoButtonState.msoButtonDown; Obtengo una excepción COM en tiempo de ejecución con HRESULT E_FAIL. - public wireless