我正在尝试使用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.InternetMessageId
和EmailMessage.Id
以及主题等详细信息。在我的情况下,我可能会收到相同主题和不同身体内容的电子邮件。
之后,根据用户操作,我想从Exchange服务器获取特定的电子邮件。有什么方法我可以使用并获得基于EmailMessage.InternetMessageId
或EmailMessage.Id
的电子邮件?这些ID值可靠吗?我在文档中找不到方法。目前我正在考虑根据主题阅读电子邮件,然后根据EmailMessage.Id.UniqueId
过滤结果
有没有好的替代方法从Exchange服务器获取特定的电子邮件?
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文件