我有一个邮箱,它每5分钟从远程站点接收一次自动电子邮件。该电子邮件中包含的字符串需要与前一封电子邮件中的相同字符串进行比较。
由于明显的原因,我试图使此过程自动化。
到目前为止,我已经可以阅读ConversationTopic
电子邮件的了,但是,我似乎还没弄清楚如何阅读电子邮件的内容。
当它称为:
email.Load();
MessageBox.Show(email.TextBody.Text.ToString());
我收到以下错误:
You must load or assign this property before you can read its value
我有一个谷歌,我找不到与我的实例相关的任何东西,所以任何帮助都将非常有用。
到目前为止,这是我的完整代码:
private void Form1_Load(object sender, EventArgs e)
{
try
{
//MessageBox.Show("Registering Exchange connection");
_service = new ExchangeService
{
Credentials = new WebCredentials("[email protected]", "*****")
};
}
catch
{
MessageBox.Show("new ExchangeService failed.");
return;
}
// This is the office365 webservice URL
_service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
// Prepare seperate class for writing email to the database
try
{
//MessageBox.Show("Reading mail");
// Read 100 mails
foreach (EmailMessage email in _service.FindItems(WellKnownFolderName.Inbox, new ItemView(10)))
{
if (email.ConversationTopic.ToString().Contains("from RockBLOCK 300234066454740"))
{
email.Load();
MessageBox.Show(email.TextBody.Text.ToString());
}
}
MessageBox.Show("Exiting");
}
catch (Exception ex)
{
MessageBox.Show("An error has occured. \n:" + ex.Message);
}
}
抛出异常是因为您试图读取该属性Item.TextBody
。此属性不是一流的电子邮件属性。
该文件说:
并非所有重要的电子邮件属性和元素都是一流的属性和元素。要获取其他属性或元素,
PropertySet
如果您正在使用EWS托管API,则需要将其添加到您的应用程序中,或者使用属性路径将其添加到EWS操作调用中。例如,要检索文本正文...,请创建您的PropertySet
...
在您的情况下:
email.Load(new PropertySet(EmailMessageSchema.ConversationTopic, ItemSchema.TextBody));
使用此请求,EWS会EmailMessage
从中加载并返回具有两个属性的PropertySet
。
注意:
通过为PropertySet
您指定需要使用的属性,EWS可以更快地处理您的请求,因为它不必搜索所有一流的电子邮件属性。而且,您不会在尝试读取一个属性(该属性不是first-class-email属性的成员)的地方出现这种错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句