Cifre mediante programación el correo electrónico de Outlook con Inspector

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());
  }
}              

preguntado el 03 de mayo de 12 a las 22:05

Alguna información adicional: Cuando intento cbb.State = MsoButtonState.msoButtonDown; Obtengo una excepción COM en tiempo de ejecución con HRESULT E_FAIL. -

2 Respuestas

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

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 or haz tu propia pregunta.