我目前正在尝试实施一项服务,该服务使用EWS对用户的Outlook联系人进行更新,但我在写入电子邮件地址字段方面遇到了一些麻烦。请注意,我不是Exchange开发人员,而且在EWS方面我是新手。
使用FindItems()方法搜索用户的contacts文件夹时,返回的Contact对象将其电子邮件地址字段作为正确的SMTP地址(blah@blah.com)。但是,当我更新并保存联系人时,下一次我检索该联系人时,电子邮件地址字段显示LegacyDN地址(/ o = Blah / ou = Exchange管理组/ cn =收件人/ cn = Blah)。即使我在更新时将完全相同的SMTP地址写入联系人字段,也会发生这种情况。
不知何故,EWS似乎在内部将SMTP地址转换为ExchangeLDn地址。出于多种原因,这是有问题的。特别是,它似乎打破了我们从Exchange服务器读取的一些其他服务,它使得无法在不执行非常慢的ResolveName调用的情况下正确显示电子邮件地址。有没有办法阻止EWS这样做?使用Outlook Redemption的其他服务在正确编写SMTP地址方面没有问题,但我们正在尝试淘汰该服务并使用Redemption API。我还应该提到,只有在更新内部用户的联系人时才会出现此问题。外部用户始终写入正确的SMTP地址。
感谢。
答案 0 :(得分:1)
我的经验表明,在联系人创建/更新期间将 MailboxType 设置为 OneOff 可避免从SMTP到LegacyDN的内部地址类型转换:
var address = new EmailAddress
{
Address = "user@example.com",
MailboxType = MailboxType.OneOff
};
newContact.EmailAddresses[EmailAddressKey.EmailAddress1] = address;
答案 1 :(得分:0)
您是否尝试设置EmailAddress的MailboxType属性?
我对内部用户有一些类似的问题,但在我的情况下,我收到了一个异常,而不是LegacyDN。
在我的情况下,将属性设置为MailboxType.Mailbox解决了问题。