如何使用 Exchange Web 服务 (EWS) 获取当前用户自己的电子邮件地址或输入支票?

How get the current user's own email address or check entered, using Exchange Web Services (EWS)?

我必须使用外部 Exchange 服务器。如何使用 EWS 获取用户输入的自己的电子邮件地址或支票地址(他完全介绍了自己的地址)? 电子邮件地址与用户名不同。

你可能对 ResolveName 方法有点运气。使用此方法,您可以搜索用户的全局地址列表。并通过使用简单的 if else 来查看是否返回了任何结果。此方法确实解决了不明确的名称,因此请务必仔细检查结果

示例:

   NameResolutionCollection coll = service.ResolveName("Johnson", folders, ResolveNameSearchLocation.DirectoryOnly, false);

   foreach (NameResolution nameRes in coll)
   {
      Console.WriteLine("Contact name: " + nameRes.Mailbox.Name);
      Console.WriteLine("Contact e-mail address: " + nameRes.Mailbox.Address);
      Console.WriteLine("Mailbox type: " + nameRes.Mailbox.MailboxType);
   }

如果您想阅读更多相关信息:https://msdn.microsoft.com/en-us/library/microsoft.exchange.webservices.data.exchangeservice.resolvename(v=exchg.80).aspx

根据 iCode4U 的回答,如果您的服务使用默认凭据(来自登录用户),那么这可能会满足您的需要:

String address = service.ResolveName(Environment.UserName)(0).Mailbox.Address;

编辑: 如果不能相信上述查询所带来的结果的唯一性,那么最好使用这样的东西(这在我的组织中有效, 其中用户名也是电子邮件标识符,但每个人都必须调整它以适应自己的情况):

string address = Service.ResolveName(Environment.UserName).Select(
    a => a.Mailbox.Address).FirstOrDefault(
    b => b.StartsWith(Environment.UserName + "@",
        StringComparison.InvariantCultureIgnoreCase));

此刻的best solution

您可以将 ConvertId 与通用地址一起使用,然后 Exchange 将 return 该邮箱的 PrimarySMTP,例如

Folder Inbox = Folder.Bind(service, WellKnownFolderName.Inbox);
AlternateId aiAlternateid = new AlternateId(IdFormat.EwsId, Inbox.Id.UniqueId, "mailbox@domain.com");
AlternateIdBase aiResponse = service.ConvertId(aiAlternateid, IdFormat.EwsId);
Console.WriteLine(((AlternateId)aiResponse).Mailbox);

我们使用加载到用户 PowerShell 配置文件中的这个函数。

    Function CurrentUserPrimarySmtpAddress()
    {
      <#
        .SYSNOPSIS
          Attempt to retrieve the current user's primary SMTP address.

        .DESCRIPTION
          Attempt to retrieve the current user's primary SMTP address.

        .NOTES
          Author: David Barrett
          Date Created: 08NOV2016

        .LINK
          https://gallery.technet.microsoft.com/office/PowerShellEWS-Update-items-48c3dcfc

        .EXAMPLE
          $PrimarySmtpAddress = CurrentUserPrimarySmtpAddress
      #>

      $searcher = [adsisearcher]"(samaccountname=$env:USERNAME)"
      $result = $searcher.FindOne()

      if ($result -ne $null)
      {
        return $result.Properties["mail"]
      }
      return $null
    }