c# - 如何使用 Microsoft 的 EWS API 2.0 获取联系人的电子邮件地址?

标签 c# .net exchangewebservices

我正在尝试获取默认联系人文件夹中所有联系人的电子邮件地址。到目前为止,我已成功使用以下代码;

var contactsfolder = ContactsFolder.Bind(service, WellKnownFolderName.Contacts,
                    new PropertySet(BasePropertySet.IdOnly, FolderSchema.TotalCount));
 var view = new ItemView(contactsfolder.TotalCount)
  {
      PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, ContactSchema.DisplayName, ContactSchema.EmailAddress1)
  };
 var contactItems = service.FindItems(WellKnownFolderName.Contacts, view);

有时我收到的电子邮件不是有效的 SMTP 电子邮件地址。

/o=WWE/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=e20105f2e8434d9ea58efc56e8b5a173-John Cena

我的问题是如何从上述内容(通用名称)中获取有效的电子邮件地址?

最佳答案

出于性能原因,FindItems 通常会返回 native 地址(例如 EX 地址)。如果您对同一项目发出 GetItem 请求(例如 Load 或 LoadProperitesfromitems),则 Exchange 应该为您将 EX 地址转换为 SMTP 地址。

否则您也可以使用 ResolveName https://msdn.microsoft.com/en-us/library/office/dn645423(v=exchg.150).aspx 自己完成在 EX 地址上(只要在 GAL 中列出)

一个异常(exception)是,如果您有一个用户的联系人已从全局地址列表中删除,因为他们已经离开公司并且他们的邮箱已被删除。因为只有 EX 地址存储在从 GAL 添加的联系人中,所以它无法将其转换回 SMTP 地址。

关于c# - 如何使用 Microsoft 的 EWS API 2.0 获取联系人的电子邮件地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42648161/

相关文章:

c# - 无法取消 Hook Windows 窗体的 backgroundworker 事件 (C#)

c# - 将 CheckedlistBox 绑定(bind)到 DataSource c#

c# - 从 C# 运行 Powershell 脚本时出错

c# - 有没有更好的方法将对象从数据库查询映射到对象?

c# - 知道文件被访问 IIS

python - EWS 推送订阅,如何知道什么时候到期?

c# - while 单变量循环多条件检查

.net - FSharp.Compiler.Service 编译为 dll 错误

java - OAuth MSAL4J Office365 -> AccessToken 错误 "The token contains no permissions, or permissions can not be understood."

.net - 使用 Exchange Web 服务 (EWS) 托管 API 为其他用户创建任务