【发布时间】:2016-08-25 16:37:09
【问题描述】:
我必须使用外部 Exchange 服务器。如何使用 EWS 获取用户输入的自己的电子邮件地址或检查地址(他完全介绍了自己的地址)? 电子邮件地址与用户名不同。
【问题讨论】:
标签: exchangewebservices ews-managed-api
我必须使用外部 Exchange 服务器。如何使用 EWS 获取用户输入的自己的电子邮件地址或检查地址(他完全介绍了自己的地址)? 电子邮件地址与用户名不同。
【问题讨论】:
标签: exchangewebservices ews-managed-api
此时的best solution。
您可以将 ConvertId 与通用地址一起使用,然后 Exchange 将返回该邮箱的 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);
【讨论】:
您可能对 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);
}
【讨论】:
根据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));
【讨论】:
我们使用加载在用户 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
}
【讨论】: