Exchange server Exchange Web服务:查找发送给收件人的电子邮件
我正在使用Exchange Web服务连接到邮箱并查找符合特定条件的邮件,使用with 我可以通过“发件人”电子邮件地址过滤邮箱中的电子邮件,如下所示:Exchange server Exchange Web服务:查找发送给收件人的电子邮件,exchange-server,exchangewebservices,Exchange Server,Exchangewebservices,我正在使用Exchange Web服务连接到邮箱并查找符合特定条件的邮件,使用with 我可以通过“发件人”电子邮件地址过滤邮箱中的电子邮件,如下所示: var service = new ExchangeService(ExchangeVersion.Exchange2010_SP1) { TraceEnabled = true, Credentials = new WebCredentials(usern
var service = new ExchangeService(ExchangeVersion.Exchange2010_SP1)
{
TraceEnabled = true,
Credentials = new WebCredentials(username, password)
};
var filter = new SearchFilter.ContainsSubstring(EmailMessageSchema.From, "some@email.com");
service.FindItems(WellKnownFolderName.Inbox, filter, new ItemView(50))
var filter = new SearchFilter.ContainsSubstring(EmailMessageSchema.DisplayTo, "display name");
我可以在DisplayTo
属性上进行如下筛选:
var service = new ExchangeService(ExchangeVersion.Exchange2010_SP1)
{
TraceEnabled = true,
Credentials = new WebCredentials(username, password)
};
var filter = new SearchFilter.ContainsSubstring(EmailMessageSchema.From, "some@email.com");
service.FindItems(WellKnownFolderName.Inbox, filter, new ItemView(50))
var filter = new SearchFilter.ContainsSubstring(EmailMessageSchema.DisplayTo, "display name");
但据我所知,只搜索收件人的显示名称。我想搜索电子邮件地址或域名
这不会在我预期的情况下返回结果:
var filter = new SearchFilter.ContainsSubstring(EmailMessageSchema.ToRecipients, "some@email.com");
是否可以找到收件人列表中包含指定电子邮件地址的所有电子邮件?可能是因为您没有访问正确的文件夹,即:已发送邮件 替换
service.FindItems(WellKnownFolderName.Inbox, filter, new ItemView(50))
借
编辑:我误解了最初的问题。 也许你应该看看下面的MSDN博客:
它解释了如何使用EWS进行复杂的搜索。我没有找到使用搜索过滤器根据收件人电子邮件地址查找电子邮件的方法 可以使用不同的ExchangeService.FindItems重载,该重载接受querystring 查找地址位于收件人或抄送字段中的电子邮件
var contactEmailAddress = "some@email.com";
var querystring = string.Format("Participants:={0}", contactEmailAddress);
service.FindItems(WellKnownFolderName.Inbox, queryString, view);
var contactEmailAddress = "some@email.com";
var querystring = string.Format("(From:={0} OR Participants:={0})", contactEmailAddress);
service.FindItems(WellKnownFolderName.Inbox, queryString, view);
查找地址位于发件人、收件人或抄送字段中的电子邮件
var contactEmailAddress = "some@email.com";
var querystring = string.Format("Participants:={0}", contactEmailAddress);
service.FindItems(WellKnownFolderName.Inbox, queryString, view);
var contactEmailAddress = "some@email.com";
var querystring = string.Format("(From:={0} OR Participants:={0})", contactEmailAddress);
service.FindItems(WellKnownFolderName.Inbox, queryString, view);
我认为此功能需要Exchange 2010
有关查询语法的其他一些资源:
ItemView view = new ItemView(200);
view.PropertySet = new PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.DateTimeSent);
List<SearchFilter> searchFilterCollection = new List<SearchFilter>();
searchFilterCollection.Add(new SearchFilter.IsGreaterThanOrEqualTo(EmailMessageSchema.DateTimeSent, LastServiceRun)); //Fetching recently sent emails
//In case you want to have more than one filter
SearchFilter searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, searchFilterCollection);
FindItemsResults<Item> results = service.FindItems(WellKnownFolderName.SentItems, searchFilter, view);
foreach (Microsoft.Exchange.WebServices.Data.EmailMessage item in results)
{
PropertySet propSet = new PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.ToRecipients);
EmailMessage sentEmail = (EmailMessage)Item.Bind(service, item.Id, propSet);
if (sentEmail.ToRecipients.Any(sEmail => sEmail.Address == mySearchEmailAddress))
{
//An email found where an address is in the To field - Your logic comes here
}
}`
ItemView=newitemview(200);
view.PropertySet=newpropertyset(BasePropertySet.IdOnly,EmailMessageSchema.DateTimeSent);
List searchFilterCollection=新建列表();
searchFilterCollection.Add(新的SearchFilter.IsGreaterThanOrEqualTo(EmailMessageSchema.DateTimeSent,LastServiceRun))//获取最近发送的电子邮件
//如果您想要有多个过滤器
SearchFilter SearchFilter=新建SearchFilter.SearchFilterCollection(LogicalOperator.And,SearchFilterCollection);
FindItemsResults=service.FindItems(WellKnownFolderName.SenItems、searchFilter、view);
foreach(结果中的Microsoft.Exchange.WebServices.Data.EmailMessage项目)
{
PropertySet propSet=新的PropertySet(BasePropertySet.IdOnly,EmailMessageSchema.ToRecipients);
EmailMessage sentEmail=(EmailMessage)Item.Bind(服务,Item.Id,propSet);
if(sentmail.ToRecipients.Any(sEmail=>sEmail.Address==mysearchemaildaddress))
{
//在“收件人”字段中找到地址的电子邮件-您的逻辑在此显示
}
}`
这不是问题所在。收件箱文件夹包含需要使用EWS检索的电子邮件。使用SearchFilter API时,可以在收件箱中查找电子邮件,但不能按收件人地址进行过滤。谢谢@Fabien,是的,我随后发现inbox=>SENTITEMS问题,但我仍然无法过滤SENTITEMS文件夹中发送给特定收件人的电子邮件。我检查了你的链接,它提供了通过==,!=,进行搜索的便利,etc,但与_数组不同。我需要在这里检查RecipientsArray中是否存在电子邮件地址。你能指导我吗?不管实际的文件夹是什么,这都不起作用。使用查询字符串重载似乎是目前唯一可行的选择-希望EWS团队能够在某个时候解决这个问题-看起来这个问题在EWS API 2.2中仍然存在。您找到解决方法了吗?@02Anant我的解决方案是将FindItems与查询字符串一起使用,如我的答案所示,并在此处介绍