我们有一个Exchange Web服务应用程序,当引用的电子邮件没有主题时会抛出错误。
我们的自动化流程需要使用电子邮件的主题,因此代码正在尝试引用它。但是,如果收件箱中的电子邮件缺少主题,而不是抛出错误,我想改变行为。
这是我的代码:
//creates an object that will represent the desired mailbox
Mailbox mb = new Mailbox(common.strInboxURL);
//creates a folder object that will point to inbox fold
FolderId fid = new FolderId(WellKnownFolderName.Inbox, mb);
... code removed fro brevity ...
// Find the first email message in the Inbox that has attachments. This results in a FindItem operation call to EWS.
FindItemsResults<Item> results = service.FindItems(fid, searchFilterCollection, view);
if (results.Count() > 0)
{
do
{
// set the prioperties we need for the entire result set
view.PropertySet = new PropertySet(
BasePropertySet.IdOnly,
ItemSchema.Subject,
ItemSchema.DateTimeReceived,
ItemSchema.DisplayTo, EmailMessageSchema.ToRecipients,
EmailMessageSchema.From, EmailMessageSchema.IsRead,
EmailMessageSchema.HasAttachments, ItemSchema.MimeContent,
EmailMessageSchema.Body, EmailMessageSchema.Sender,
ItemSchema.Body) { RequestedBodyType = BodyType.Text };
// load the properties for the entire batch
service.LoadPropertiesForItems(results, view.PropertySet);
因此在该代码中,错误将在最后一行service.LoadPropertiesForItems(results, view.PropertySet);
上的复杂属性get 上抛出。
所以,我知道我将不得不在这里执行类似Try..Catch
的操作,但是,我需要检查邮件项的Subject属性是否存在才能引用它以查看它是什么 - 某种鸡和蛋的问题。
如果没有主题,我需要将电子邮件标记为已读,向团队发送警告电子邮件,然后将邮箱中的下一封未读电子邮件发送给您。
任何有关采用此方法的最佳方法的建议都将受到赞赏。
由于
答案 0 :(得分:1)
主题未设置或是否为空白?
您应该能够使用SearchFitler隔离任何此类电子邮件,例如对Subject属性使用Exists Search过滤器,然后取消它以使其返回未设置Subject的任何项目
SearchFilter sfSearchFilteri = new SearchFilter.Exists(ItemSchema.Subject);
SearchFilter Negatesf = new SearchFilter.Not(sfSearchFilteri);
service.FindItems(WellKnownFolderName.Inbox, Negatesf, new ItemView(1000));
然后从LoadPropertiesForItems
中排除这些项目干杯 格伦