c# - 如何从 EWS 交换服务器访问特定电子邮件
问题描述
我正在尝试使用 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
主题等详细信息。就我而言,我可能会收到主题相同但正文内容略有不同的电子邮件。
后来,根据用户操作,我想从交换服务器获取特定的电子邮件。有什么方法可以使用并基于EmailMessage.InternetMessageId
or获取电子邮件EmailMessage.Id
吗?这些身份证可靠吗?我在文档中找不到方法。目前我正在考虑根据主题阅读电子邮件,然后根据EmailMessage.Id.UniqueId
有没有什么好的替代方法可以从交换服务器获取特定的电子邮件?
解决方案
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-将消息导出到 EML 文件作为交换
推荐阅读
- javascript - 在 React 中复制和移动组件
- javascript - 以秒为单位将 SVG 路径动画化为更小的尺寸(如点)
- javascript - 动画开始前跳到0
- truetype - 如何正确理解 TrueType cmap 的子表 Format 4?
- python - Pyplot保存空白数字
- javascript - 自定义反应钩子中的记忆依赖项是反模式吗?
- python - 将带有 void * 参数的函数传递给 dict 时,Cython 会引发错误
- d3.js - 无法缩放堆积条形图 d3.js V4
- windows - 以编程方式控制应用程序自动启动 C/C++
- nhibernate - 使用每个表的主键进行一对一或多对一映射