Наше программное обеспечение обрабатывает электронные письма, поступающие в почтовый ящик Exchange. Этот почтовый ящик используется как людьми, так и нашим программным обеспечением, поэтому мы использовали ExtendedProperty, чтобы отслеживать, какие электронные письма мы обработали. Код такой:
Код: Выделить всё
// Build our extended property definition
Guid readByEmailComponentGUID = new Guid("{FCF74ABF-684E-4cc7-8A83-B36D3A209219}"); //GUID for our property
ExtendedPropertyDefinition X_READBYCOMPONENT = new ExtendedPropertyDefinition(readByEmailComponentGUID, "X_READBYCOMPONENT", MapiPropertyType.Boolean); //Settings and name for our property
// Create a search filter for querying EWS
SearchFilter.SearchFilterCollection srchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.Or);
srchFilter.Add(new SearchFilter.Not(new SearchFilter.Exists(X_READBYCOMPONENT))); //Show messages that do not have our new property (thus have never been received)
srchFilter.Add(new SearchFilter.IsEqualTo(X_READBYCOMPONENT, false)); //Show messages that have our new property, but it's set to false (to re-receive)
ItemView view = new ItemView(250, 0, OffsetBasePoint.Beginning);
// Query EWS with our search filter and our view
FindItemsResults findResults = EWSService.FindItems("Inbox", srchFilter, view);
// Process the results of our search
foreach (Item item in findResults){
// Check to see if this email has our internal read flag on it, and if it does, do not process it again.
ExtendedProperty ReadByComponentFlag = item.ExtendedProperties.FirstOrDefault(itm => itm.PropertyDefinition == X_READBYCOMPONENT);
if (!(ReadByComponentFlag is null) && (bool)ReadByComponentFlag.Value == true)
{
continue;
}
if (item is EmailMessage){
EmailMessage em = item as EmailMessage; //Load the email message
// process the mail message and when that's done mark it as read
em.SetExtendedProperty(X_READBYCOMPONENT, true); //Sets our new property to TRUE to exclude this email from future receive actions
em.Update(ConflictResolutionMode.NeverOverwrite);
}
}
Изменилось ли что-нибудь в том, как EWS на O365 обрабатывает эти фильтры? Кто-нибудь еще сталкивался с подобными проблемами?
Прямо сейчас мы добавили обходной путь (который вы можете увидеть в коде выше), позволяющий вручную проверять расширенные свойства и пропускать электронные письма, но это это не жизнеспособное долгосрочное решение, поскольку в некоторых из этих почтовых ящиков находится 14 000 электронных писем, которые мы извлекаем и получаем при каждом запуске.
Подробнее здесь: https://stackoverflow.com/questions/767 ... -filtering
Мобильная версия