EWS管理API.IsNew总是返回false,并且可以';不要使用TextBody
本文关键字:TextBody IsNew API 管理 返回 false EWS | 更新日期: 2023-09-27 18:24:32
我是一名新手开发人员,我已经在EWS上呆了好几个小时了。我需要通读最近的电子邮件,获取所有未读的电子邮件,并使用它们的数据来做一些事情。
现在我的代码是这样的。
static void Main(string[] args)
{
ServicePointManager.ServerCertificateValidationCallback = CertificateValidationCallBack;
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013);
service.Credentials = new WebCredentials("support@mycompany.com", "mysupersuperdupersecretpassword");
service.AutodiscoverUrl("support@mycompany.com", RedirectionUrlValidationCallback);
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox,new ItemView(2));
foreach (Item item in findResults.Items)
{
// works perfectly until here
Console.WriteLine(item.Subject);
Console.WriteLine(''n');
item.Load();
string temp = item.Body.Text;
// I can't seem to get TextBody to work. so I used a RegEx Match match = Regex.Match(temp, "<body>.*?</body>", RegexOptions.Singleline);
string result = match.Value;
result = result.Replace("<body>", "");
result = result.Replace("</body>", "");
Console.Write(result);
Console.WriteLine(''n');
//Now the email boddy is fine but IsNew always returns false.
if (item.IsNew)
{
Console.WriteLine("This message is unread!");
}
else
{
Console.WriteLine("This message is read!");
}
}
}
我已经在谷歌上搜索了很多次,但我还是被卡住了。我现在如何阅读哪些电子邮件,有没有一种方法可以获得比我所做的更有效的电子邮件正文?任何帮助都将不胜感激。
如果你还没有读过MSDN的文章,那么它的用法就很好了。
对于您的问题,将您的项目投射到EmailMessage
foreach (Item item in findResults.Items)
{
var mailItem = (EmailMessage)item;
// works perfectly until here
Console.WriteLine(mailItem.Subject);
}
我确实注意到你没有使用属性集,但只使用EWS进行事件通知,而没有查看现有的邮件,这可能会有所不同。
根据您的更改更新添加
将此用于您的属性集
new PropertySet(BasePropertySet.FirstClassProperties) {
RequestedBodyType = BodyType.Text
};
此外,这读起来有点好,并使用了Body.Text
属性
foreach (Item myItem in findResults.Items.Where(i=>i is EmailMessage))
{
var mailItem = myItem as EmailMessage;
Console.WriteLine(mailItem.Subject);
mailItem.Load(new PropertySet(BasePropertySet.FirstClassProperties) {
RequestedBodyType = BodyType.Text
}); // Adding this parameter does the trick :)
Console.WriteLine(mailItem.Body.Text);
if(! mailItem.IsRead)
Console.WriteLine("Who is Your Daddy!!!!");
}