C# 使用EWS获取基于搜索过滤器的电子邮件时丢失的电子邮件不正确
我创建了下面的方法。 此方法应根据某些条件返回我搜索的电子邮件。对于某些电子邮件,它会按预期工作,并返回我搜索的电子邮件,但对于其他电子邮件,它不会返回 例如,如果我搜索标题为“SomeTitle”且发件人为“的电子邮件”some@sender.com对于收到的时间“2019/01/01 12:05:05”,它可以正常工作 然后,我搜索另一封标题为“SomeOtherTitle”的电子邮件,发件人为“someother@sender.com对于收到的时间“2019/02/02 11:02:02”,它不起作用 我可以在打开收件箱,并验证我正在搜索的电子邮件是否存在,但由于某些我无法理解的原因未找到 方法:C# 使用EWS获取基于搜索过滤器的电子邮件时丢失的电子邮件不正确,c#,exchangewebservices,C#,Exchangewebservices,我创建了下面的方法。 此方法应根据某些条件返回我搜索的电子邮件。对于某些电子邮件,它会按预期工作,并返回我搜索的电子邮件,但对于其他电子邮件,它不会返回 例如,如果我搜索标题为“SomeTitle”且发件人为“的电子邮件”some@sender.com对于收到的时间“2019/01/01 12:05:05”,它可以正常工作 然后,我搜索另一封标题为“SomeOtherTitle”的电子邮件,发件人为“someother@sender.com对于收到的时间“2019/02/02 11:02:02”
private FindItemsResults<Item> GetEmailItems(
CustomObjClass e)
{
var itemView = new ItemView(int.MaxValue);
var searchCollection = new SearchFilter.SearchFilterCollection(LogicalOperator.And);
var filter1 = new SearchFilter.IsGreaterThanOrEqualTo(EmailMessageSchema.DateTimeReceived, e.EmailReceivedDateTime.AddSeconds(-1));
searchCollection.Add(filter1);
var filter2 = new SearchFilter.IsLessThanOrEqualTo(EmailMessageSchema.DateTimeReceived, e.EmailReceivedDateTime.AddSeconds(1));
searchCollection.Add(filter2);
var filter3 = new SearchFilter.IsEqualTo(EmailMessageSchema.From, new EmailAddress(e.SenderEmail));
searchCollection.Add(filter3);
if (e.Subject == null)
{
searchCollection.Add(new SearchFilter.Not(new SearchFilter.Exists(EmailMessageSchema.Subject)));
}
else
{
searchCollection.Add(new SearchFilter.IsEqualTo(EmailMessageSchema.Subject, e.Subject));
}
var emailItems = ExchangeService.FindItems(
new FolderId(WellKnownFolderName.Inbox, new Mailbox(ExchangeMailServerOptions.User)),
searchCollection,
itemView
);
return emailItems;
}
private FindItemsResults GetEmailItems(
自定义对象(e类)
{
var itemView=新的itemView(int.MaxValue);
var searchCollection=new SearchFilter.SearchFilterCollection(LogicalOperator.And);
var filter1=new SearchFilter.IsGreaterThanOrEqualTo(EmailMessageSchema.DateTimeReceived,e.EmailReceivedDateTime.AddSeconds(-1));
searchCollection.Add(filter1);
var filter2=new SearchFilter.IsLessThanOrEqualTo(EmailMessageSchema.DateTimeReceived,e.EmailReceivedDateTime.AddSeconds(1));
searchCollection.Add(filter2);
var filter3=new SearchFilter.IsEqualTo(EmailMessageSchema.From,new EmailAddress(e.SenderEmail));
searchCollection.Add(filter3);
if(e.Subject==null)
{
添加(new SearchFilter.Not(new SearchFilter.Exists(EmailMessageSchema.Subject));
}
其他的
{
添加(新的SearchFilter.IsEqualTo(EmailMessageSchema.Subject,e.Subject));
}
var emailItems=ExchangeService.FindItems(
新文件夹ID(WellKnownFolderName.Inbox,新邮箱(ExchangeMailServerOptions.User)),
搜索收藏,
项目视图
);
退回邮件;
}
我尝试过很多不同的东西,但我的想象力已经耗尽了。非常感谢您提供的任何帮助请解释您想要实现的目标。我不明白你的问题。@Andreaschmidt在问题中添加了一个例子。谢谢。我不确定使用逻辑and运算符使用filter1和filter2可以实现什么。请显示CustomObjClass中的值…@AndreasSchmidt它只是确保接收到的时间匹配,因为毫秒精度不受支持。但是,即使我删除了这两个过滤器,代码的行为也与我在这个问题中描述的完全相同。请删除行
searchCollection.Add(new SearchFilter.Not(new SearchFilter.Exists(EmailMessageSchema.Subject))
并重试。还请提供有关CustomObjClass的更多信息。