2

OutlookオブジェクトモデルでC#を使用しています(ライセンスのため、償還はオプションではありません)。電子メールメッセージを送信する前にプログラムで暗号化するのに問題があります。

暗号化ボタン(オンラインの例ではId 718)を表すと思われるCommandBarButtonへの参照を正常に取得できますが、プログラムで押すことはできません。CommandBarButton Execute()メソッドとSendKeysの両方を使用してみました(このコンテキストでsendkeysが有効かどうかはわかりません)。すべてのdebug.writelineステートメントは、ボタンがmsoButtonUp状態にあることを示しています。

私はこれで何日も遊んでいて、それを機能させることができないようです。アドバイスをいただければ幸いです。

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

2 に答える 2

2

実際には、プログラムで暗号化、署名、暗号化 + 署名、またはどちらも保証しないより良い方法があります。また、メール アイテムを表示しなくても実行できます。次の記事は、メール アイテムのプロパティを使用する方法を示しています。

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

たとえば、C# で mItem がメール アイテムの場合、次のコードは署名と暗号化をオフにします。

mItem.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x6E010003", 0);
于 2013-08-21T22:22:18.943 に答える
1

試行錯誤で思いつきました。主な問題は、MailItem を表示する前に Inspector を使用していたことにあるようです。最初に Display への呼び出しを追加すると解決しました。興味のある人のために、これが私のために働いたコードです:

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);
    }
于 2012-05-11T18:48:17.967 に答える