簡體   English   中英

C#托管EWS通過共享郵箱的ID獲取電子郵件

[英]C# Managed EWS get email By ID from shared mailbox

我正在使用EWS通過控制台應用程序管理共享郵箱的電子郵件。

處理完它們后,將它們移動到共享收件箱下的另一個文件夾中(將消息ID保存到SQL記錄之后)。

通過一個單獨的過程,我想使用ID檢索電子郵件。

使用代碼時:

var email = EmailMessage.Bind(serviceInstance, new ItemId(id));

服務拋出此異常:

Microsoft.Exchange.WebServices.Data.ServiceResponseException:'在存儲中找不到指定的對象。該過程無法獲取正確的屬性。

我知道該服務用戶對收件箱和文件夾具有權限,因為同一服務先前已閱讀過該收件箱並移動了電子郵件。

根據MS 文檔 的原因是:

當您將電子郵件移動或復制到另一個文件夾時,會在新文件夾中創建一個具有唯一項目ID的新項目,並刪除原始消息。

因此,您將獲得異常: The specified object was not found in the store.

如何解決呢?

在處理電子郵件消息之前, 創建自定義擴展屬性並將其設置在電子郵件中並保存電子郵件,以與EWS服務器共享新狀態。

Guid myPropertySetId = new Guid("{20B5C09F-7CAD-44c6-BDBF-8FCBEEA08544}"); 
ExtendedPropertyDefinition myExtendedPropertyDefinition = new ExtendedPropertyDefinition(myPropertySetId, "MyExtendedPropertyName", MapiPropertyType.String); 
message.SetExtendedProperty(myExtendedPropertyDefinition, "MyExtendedPropertyValueIdentifingAnEmailMessageToBeMoved");
message.SendAndSaveCopy(); 

在移動電子郵件之前,請存儲myExtendedPropertyDefinition的值(在上面的示例中: "MyExtendedPropertyValueIdentifingAnEmailMessageToBeMoved" )。 然后,您可以將電子郵件移動到其目標文件夾。

處理完原始電子郵件(“移動”>“刪除”)后,您可以通過以下方式查找電子郵件的新目的地 :查找自定義屬性以及為標識電子郵件而存儲的值:

ItemView view = new ItemView(5); 
SearchFilter searchFilter = new SearchFilter.IsEqualTo(myExtendedPropertyDefinition, "MyExtendedPropertyValueIdentifingAnEmailMessageToBeMoved"); 
view.PropertySet = new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject, myExtendedPropertyDefinition); 
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.SentItems, searchFilter, view); 

為每封電子郵件使用唯一的標識值,以獲取一個搜索結果。

請注意,此解決方法是文檔中正式建議的方法(由MS提出)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM