我正在使用WinForms应用程序,它使用EWS来读取Exchange Server的邮件。 Exchange处于2007版本。我可以通过EWS成功读取,移动,删除和发送电子邮件。我正在使用自动发现来验证并选择邮箱。唯一的问题是我从未收到任何发件人的电子邮件地址。我得到的唯一的东西是发件人的名字,但没有地址。
到目前为止,这是我的代码:
Service1 = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
Service1.Credentials = new WebCredentials(Properties.Settings.Default.Username, Properties.Settings.Default.Password);
Service1.Url = new Uri(Properties.Settings.Default.Serviceurl);
EmailMessage messageAtt = EmailMessage.Bind(Service1, item.Id, new PropertySet(BasePropertySet.IdOnly, ItemSchema.Attachments, ItemSchema.HasAttachments, EmailMessageSchema.IsRead));
EmailMessage messageData = (EmailMessage)item;
foreach (Attachment attachment in messageAtt.Attachments)
{
String from = messageData.Sender.Address.ToString();
}
这是我调试时得到的:
任何人都可以给我一个建议我在这里误会的错误吗?我写的是什么问题,甚至可能是Exchange Server的设置问题?
答案 0 :(得分:1)
问题似乎是EmailMessage对象的定义:
通过使用显式转换定义EmailMessage,并非所有属性都转移到新对象。如果你使用由.Bind()方法定义的上层EmailMessage对象来尝试它,它也不会工作。发生这种情况的原因是由于PropertySet作为第三个参数传递。我找到的唯一解决方案是创建第三个对象:
EmailMessage messageInfo = EmailMessage.Bind(useService, item.Id);
此Object的缺点是,您将无法查看该项是否具有附件。 希望这有助于任何人不要在这样的愚蠢错误上浪费时间;)