使用Exchange Web Services API,是否可以确定组织中是否存在 someone@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
}
答案 0 :(得分:1)
确定用户是否只有一个带有EWS的邮箱可能比预期的更复杂,尤其是没有假冒。
如果您位于Active Directory域中,则应依赖DirectoryEntry信息来确定用户的邮箱,并相应地发送电子邮件。如果您的用户登录,则很容易获得关联的DirectoryEntry。
答案 1 :(得分:0)
有一种简单的方法可以通过检查用户的可用性来做到这一点,例如以下代码。 我试过了,它对我有用。
对于可用性结果返回错误的其他情况,我不确定,但是可以肯定的是,如果电子邮件不正确,它会这样做
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;