2015-02-23 69 views
2

我有一個標準例程,用於從郵件服務器獲取未讀電子郵件,將其標記爲已讀並進行處理。它看起來類似於這樣:使用EWS託管API獲取未讀電子郵件並將其標記爲一次讀取

var view = new ItemView(1); 
SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false)); 
var findResults = ExchangeService.FindItems(WellKnownFolderName.Inbox, sf, view); 

if (findResults.Items.Any()) 
{ 
    EmailMessage emailMsg = findResults.Items.First() as EmailMessage; 
    emailMsg.IsRead = true; 
    emailMsg.Update(ConflictResolutionMode.AutoResolve); 

    ProcessMail(emailMsg); 
} 

這可以從多種方法調用,所以我需要確保「發現未讀/標記爲已讀」操作的原子性。換句話說,在Service.FindItems()mail.Update()之間,同一封電子郵件可能會被不同的進程讀取兩次,並導致重複的處理。

現在,我不想參與有關存儲處理的電子郵件ID的討論,或者我是否應該使用訪問同一電子郵件服務器的多個進程。

我想知道的是,如果有一個EWS API方法在一次調用中執行這兩個操作?理想情況是這樣的:

var mail = ExchangeService.GetFirstUnreadEmailAndMarkItAsRead() 
+0

你有沒有想過這個?試圖確定相同的事情。 – thomas 2018-03-08 21:39:26

回答

1

不,沒有。 EWS GetItems調用不會修改該項目。

相關問題