我目前正在研究一个前同事的项目,该项目涉及从Exchange到我们的ERP系统保存电子邮件。
但我遇到了一个奇怪的问题。有时系统收到一封电子邮件,其中包含一封电子邮件作为附件。它会抛出错误,因为未设置DataTimeReceived日期。即使在.Load();
之后 private int HandleEmail(Item item, Folder moveToFolder, Folder moveToFailedFolder, Mailbox mailbox, int fatherId = 0, string uploaderEmail = "", bool isEmbeddedMail = false)
它的工作方式。是HandleEmail()方法通过原始电子邮件,直到它获得if-check。 如果附件不是FileAttachment,并且是ItemAttachment。调用以下代码。
else if (attachment is ItemAttachment)
{
var itemAttachment = attachment as ItemAttachment;
itemAttachment.Load(new PropertySet(ItemSchema.Attachments, ItemSchema.TextBody, EmailMessageSchema.Sender, EmailMessageSchema.DisplayCc, EmailMessageSchema.DateTimeReceived, EmailMessageSchema.From, ItemSchema.MimeContent, ItemSchema.Body, ItemSchema.TextBody, EmailMessageSchema.BccRecipients, ItemSchema.Attachments));
var item_ = itemAttachment.Item;
HandleEmail(item_, null, null, mailbox, (int)mailid, uploaderEmail, true); // The attached email is then looped through like it is an regular email instead of like an image.
}
在此检查中。它接受项目附件并加载一个附加属性集,其中包含一些所需的数据。 最后,该方法将其称为self,但现在使用Item Attachment将其读取为常规电子邮件。 我的问题是,一些附加的电子邮件没有设置DatetimeReceived属性。 相反,此错误显示在其位置。
Microsoft.Exchange.Webservice.Data.ServicesObjectPropertyException
这条预告信息被抛出
You must load or assign this property before you can read its value
我无法弄清楚为什么它只会发生在一些附加的电子邮件中。当我查看它自己的电子邮件时,它确实有一个收到的日期。但由于某种原因,我无法使用.Load()
我尝试过一些东西,例如对Item和ItemAttachment使用.Load,两者都没有得到任何值得的东西。 尝试使用service.loadpropertiesforitems() 我已经忘记了其他一些我已经研究过的事情,因为我在周末之前已经看过这几天了。
答案 0 :(得分:1)
我有两个建议是首先尝试EmailMessageSchema.DateTimeSent(应该与DateTimeReceived相同),这可能是在附加已发送的消息时引起的差异。另一件事是启用跟踪并查看跟踪以查看实际从服务器返回的内容也可能只是尝试加载BasePropertySet.FirstClassProperties而不是您的自定义集(只是为了测试该属性)