2

使用 Exchange Web 服务 API,是否可以确定组织内是否存在邮箱/电子邮件地址(例如某人@ mydomain.com ) ?

如果是这样,这是最简单的方法,是否可以不使用模拟?

案例: Windows 服务定期向组织内的人员发送电子邮件。它对他们的电子邮件地址没有任何明确的了解。它只知道他们的用户名并假定他们的电子邮件地址是用户名@mydomain.com。除少数没有邮箱的用户外,所有用户都是如此。在这些情况下,它不应该首先尝试发送电子邮件。

解决方案:

正如mathieu建议的那样:改为在 Active Directory 中查找用户和电子邮件地址。这个函数完成了工作:

using System.DirectoryServices.AccountManagement;
// ...

public static bool TryGetUserEmailAddress(string userName, out string email)
{
  using (PrincipalContext domainContext = 
    new PrincipalContext(ContextType.Domain, Environment.UserDomainName))
  using (UserPrincipal user = 
    UserPrincipal.FindByIdentity(domainContext, userName))
  {
    if (user != null && !string.IsNullOrWhiteSpace(user.EmailAddress))
    {
      email = user.EmailAddress;
      return true;
    }
  }
  email = null;
  return false; // user not found or no e-mail address specified
}
4

2 回答 2

1

确定用户是否只有 EWS 邮箱可能比预期的要复杂,尤其是在没有模拟的情况下。

如果您在 Active Directory 域中,则应依靠 DirectoryEntry 信息来确定用户的邮箱,并相应地发送电子邮件。如果您获得了用户登录名,则很容易获得相关的 DirectoryEntry。

于 2012-07-24T11:16:35.967 回答
0

有一种简单的方法可以通过检查用户可用性来做到这一点,如下面的代码。我试过这个,它对我有用。

我不确定可用性结果返回错误的其他情况,但可以肯定的是,当电子邮件不正确时它确实如此

要定义您的交换服务,请参阅:https ://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/get-started-with-ews-managed-api-client-applications

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);//You version
service.Credentials = new WebCredentials("user1@contoso.com", "password");
service.AutodiscoverUrl("user1@contoso.com", RedirectionUrlValidationCallback);
string email = "TEST@YOUR.COM";

// Get User Availability after 6 months 
AttendeeInfo attendee = new AttendeeInfo(email);
var attnds = new List<AttendeeInfo>();
attnds.Add(attendee);
var freeTime = service.GetUserAvailability(attnds, new 
TimeWindow(DateTime.Now.AddMonths(6), DateTime.Now.AddMonths(6).AddDays(1)), AvailabilityData.FreeBusyAndSuggestions);
//if you receive result with error then there is a big possibility that the email is not right
if(freetimes.AttendeesAvailability.OverallResult == ServiceResult.Error)
{
     return false;
}
return true;
于 2018-11-26T05:24:09.767 回答