[英]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.