Вопрос по c# – Программно зашифровать электронную почту Outlook с помощью Inspector

2

Я использую C # с объектной моделью Outlook (погашение для меня не вариант из-за лицензирования), и у меня возникают трудности с программным шифрованием сообщения электронной почты перед его отправкой.

Я могу успешно получить ссылку на CommandBarButton, который предположительно представляет кнопку «Шифровать» (Id 718 согласно онлайн-примерам), но я не могу программно нажать ее. Я попытался использовать метод CommandBarButton Execute () и SendKeys (не уверен, что sendkeys даже допустим в этом контексте). Все операторы debug.writeline показывают, что кнопка находится в состоянии msoButtonUp.

Я играл с этим уже несколько дней и не могу заставить его работать. Любые советы будут высоко ценится!

<code>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());
  }
}              
</code>
Некоторая дополнительная информация: Когда я пытаюсь cbb.State = MsoButtonState.msoButtonDown; Я получаю исключение COM во время выполнения с HRESULT E_FAIL. public wireless

Ваш Ответ

2   ответа
1

казалось, заключалась в том, что я использовал Инспектор до того, как отобразил MailItem. Добавление вызова для отображения в начале решило это. Для тех, кто заинтересован, вот код, который работал для меня:

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

подписать, зашифровать + подписать или обеспечить ни то, ни другое. И вы можете сделать это без необходимости отображать почтовый элемент. В следующей статье показано, как, используя свойство почтового элемента:

http://support.microsoft.com/kb/2636465?wa=wsignin1.0

Например, в C #, если mItem - ваш почтовый элемент, следующий код отключит подпись и шифрование:

mItem.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x6E010003", 0);

Похожие вопросы