2017-10-11 36 views
0

要求:我創建了一個Outlook加載項來調用帶有電子郵件entryid和其他信息的Web服務。接收呼叫的Web服務將轉到Exchange服務器並查找此郵件項目。在查找郵件項目時,Web服務會將附件和其他電子郵件相關字段存儲在我們的自定義數據庫中。Oulook加載項郵件發送或接收事件

解決方案: Outlook加載項具有接收MailItem對象的ItemAdd事件。然後它將自定義GUID關聯到郵件項目對象並保存它。然後它使用這些參數和文件夾entryid調用Web服務。

問題:當Web服務轉到交換服務器時,由於電子郵件仍在發送,因此未找到電子郵件。這裏的問題在於可能依賴於各種因素的時間,例如電子郵件的大小,附件的大小,上網速度等。因此,在Outlook中有任何事件可以在電子郵件實際「發送」時觸發,然後將調用Web服務。

+0

我相信你可以通過兩步處理來完成它:在ItemAdd處理程序中,向MailItem.Send事件添加第二個處理程序,並將你的調用放到後一個webservice中。 – VBobCat

回答

0

這是可以預料的 - 當Outlook發送消息時,它將其上傳到Exchange服務器,並將其移動到(本地)「已發送郵件」文件夾,從而導致啓動Items.ItemAdd事件。但不保證郵件將在服務器(在線)版本的「已發送郵件」文件夾中 - 稍後將在服務器發送郵件時發生(很多)。這通常需要幾秒鐘的時間。

在向您的Web服務器發送消息條目ID時引入延遲,或者在已發送郵件文件夾的聯機版本上處理ItemAdd事件。您可以通過在線模式(IMsgStore :: OpenEntry(...,MAPI_NO_CACHE))打開文件夾,然後使用擴展MAPI(C++或Delphi),然後從IMAPIFolder :: GetContentsTable返回的文件夾內容表中處理IMAPITable事件)或使用Redemption以在線模式重新打開該文件夾 - 請致電RDOSessionGetFolderFromID(..., MAPI_NO_CACHE)

相關問題