2

我正在开发一个 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();   
}

这是我调试时得到的:

截屏

谁能给我一个建议,我在这里犯了什么错误?我写的内容是否有问题,或者甚至可能是交换服务器的设置问题?

4

1 回答 1

1

问题似乎是 EmailMessage 对象的定义:

通过使用显式转换定义 EmailMessage,并非所有属性都被传输到新对象。如果您尝试使用由 .Bind() 方法定义的上部 EmailMessage 对象,它也不会起作用。发生这种情况的原因是由于 PropertySet 作为第三个参数传递。我找到的唯一解决方案是创建第三个对象:

EmailMessage messageInfo = EmailMessage.Bind(useService, item.Id);

此对象的缺点是,您将无法查看该项目是否具有附件。希望这可以帮助任何不把时间浪费在这样的愚蠢错误上的人;)

于 2013-09-25T08:59:12.430 回答