如何从EWS交换服务器访问特定电子邮件

问题描述 投票:0回答:1

我正在尝试使用C#从EWS获取特定的电子邮件,但无法找到识别特定电子邮件的方法。

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
            service.Credentials = new WebCredentials(myemail, password);
            service.UseDefaultCredentials = false;
            service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
            ItemView itemsView = new ItemView(5);
            string querystring = "Kind:email";                

            FindItemsResults<Item> itemResults = service.FindItems(WellKnownFolderName.Inbox, querystring, view: itemsView);

FindItems方法根据查询字符串提供电子邮件。我在我的数据库中保存EmailMessage.InternetMessageIdEmailMessage.Id以及主题等详细信息。在我的情况下,我可能会收到相同主题和不同身体内容的电子邮件。

之后,根据用户操作,我想从Exchange服务器获取特定的电子邮件。有什么方法我可以使用并获得基于EmailMessage.InternetMessageIdEmailMessage.Id的电子邮件?这些ID值可靠吗?我在文档中找不到方法。目前我正在考虑根据主题阅读电子邮件,然后根据EmailMessage.Id.UniqueId过滤结果

有没有好的替代方法从Exchange服务器获取特定的电子邮件?

c# office365 exchange-server exchangewebservices
1个回答
1
投票

IntenetMessageId应该是唯一的,但不能保证它会因为可以设置Id的不同进程的数量而存在。

如果要根据其InternetMessageId获取特定消息,则需要使用Extended属性,而不是强类型消息,例如

  String MessageID = "<blah@1223434556com">"
  ItemView ivew = new ItemView(3);
  service.TraceEnabled = true;
  ExtendedPropertyDefinition PidTagInternetMessageId = new ExtendedPropertyDefinition(4149, MapiPropertyType.String);
  SearchFilter sf = new SearchFilter.IsEqualTo(PidTagInternetMessageId, MessageID);
  FindItemsResults<Item> iCol = service.FindItems(WellKnownFolderName.Inbox, sf, ivew);

  foreach (Item item in iCol.Items)
  {
    Console.WriteLine(item.Subject);
  }

您可以使用https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-export-items-by-using-ews-in-exchange将消息导出到EML文件

© www.soinside.com 2019 - 2024. All rights reserved.