3

Add-in-Express を使用して Outlook プラグインを作成しました。コード:

private void CreateShowMessageUsingCreateItem(Outlook._Application OutlookApp) 
{ 
    Outlook.MailItem mail = null; 
    try 
    { 
        mail = OutlookApp.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem; 
        mail.Save(); 
        mail.Display(false); 
    } 
    catch (Exception ex) 
    { 
        System.Windows.Forms.MessageBox.Show(ex.Message); 
    } 
    finally 
    { 
        if (mail != null) Marshal.ReleaseComObject(mail); 
    } 
} 

Outlook が Exchange に接続されている場合に機能します。Outlook が Office365 に接続されている場合に失敗します。エラー:

Exception: System.Runtime.InteropServices.COMException (0x80004005): The operation failed.
   at Microsoft.Office.Interop.Outlook.ApplicationClass.CreateItem(OlItemType ItemType)
   at DocuSignInk.DSToolbox.ShowResponse(MailItem senderEmail) in C:\docusign_source\Ink_Outlook\DocuSignInk\DSToolbox.cs:line 540

一部の調査では、ループ内でこれらの呼び出しを行う場合、オブジェクトを解放する必要があることが示されています。しかし、私はループしていません。仕事の電話も一通も取れないので、手放すまでには至りません。

Wireshark と Charles でテストすると、問題はクライアントにあることがわかります。サーバーからより詳細なエラーが発生しているかどうかを確認しようとしましたが、サーバーへのトラフィックはまったくありません。

クイック Python スクリプトは、コマンド ラインから動作します。

import win32com.client

outlook = win32com.client.Dispatch('Outlook.Application')
mail = outlook.CreateItem(win32com.client.constants.olMailItem)
mail.Save()
mail.Display(False)

したがって、それはクライアントの何かでなければなりません。おそらくスレッドに関連していると思いますか?

4

3 に答える 3

2

これは、Microsoft Office (Outlook を含む) をアクティブ化していない場合に発生する可能性があります。

短いテスト アドインは、アクティブ化チェックが行われる前にすぐに実行されれば機能します。アクティベーション チェックが行われると、API 呼び出しは失敗します。

于 2012-08-03T18:09:42.810 に答える
0

-2147467259 である HResult と同じ例外がありました。
直接の理由は、試用版について通知する Outlook ポップアップ ウィンドウ、または上記のコードを実行して表示された電子メールを含む Outlook での以前のアクティビティを閉じた後に保留中の Outlook クローズ プロセスでした (このプロセスは、それぞれのトレイによって示されます)。アイコンが消えるまでタスクバーに表示されます)。

新しいメールの作成を実行する前に、最初にウィンドウを閉じるか、トレイ アイコンが消えるのを待つ必要があります。

于 2016-06-02T10:33:24.960 に答える
0

まず、コードは正しく、追加のリリースは必要ありません。最も明白な理由は、Outlook が Exchange Online に接続されているときに、メール アイテムを作成できないことです。これは、次の VBA マクロで確認できます。

Public Sub CreateEmailItem()

  Dim mail As Outlook.MailItem

  Set mail = Application.CreateItem(olMailItem)
  mail.Save
  mail.Display (False)

  Set mail = Nothing

End Sub

よろしく、 Dmitry Kostochko (アドイン Express チーム)

于 2012-06-28T16:01:00.147 に答える