通过 EWS 连接到 Office 365 API
Connection to Office 365 by EWS API
我在我的控制台应用程序中使用 EWS API 来处理邮箱项目,我的连接脚本看起来像
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
service.UseDefaultCredentials = true;
service.AutodiscoverUrl("emailService@domain.com");
但我发现我的电子邮件帐户已移动到 Office 365 云。我应该如何更改身份验证?
我找到了 EWS 服务 url
service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
但是我不知道怎么用
谢谢
您可以使用以下代码连接到 Office 365 上的 EWS:
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
service.Credentials = new WebCredentials("emailService@domain.com", "password");
service.AutodiscoverUrl("emailService@domain.com", RedirectionUrlValidationCallback);
您需要为Autodiscover Url 函数定义一个回调函数,如下所示:
private static bool RedirectionUrlValidationCallback(string redirectionUrl)
{
// The default for the validation callback is to reject the URL.
bool result = false;
Uri redirectionUri = new Uri(redirectionUrl);
// Validate the contents of the redirection URL. In this simple validation
// callback, the redirection URL is considered valid if it is using HTTPS
// to encrypt the authentication credentials.
if (redirectionUri.Scheme == "https")
{
result = true;
}
return result;
}
我知道这是一个相当古老的解决方案,但它对我仍然很有帮助。我有一些工具可以与 Exchange 的 "normal" 网络版本一起使用,但到目前为止,我对 Exchange Online 的测试失败了(我遇到了 "The Autodiscover service couldn't be located" 等错误)。
这里的重点是使用 WebCredentials 而不是 NetworkCredential 和电子邮件地址而不是用户名。
您现在无法在您的 EWS 应用程序中使用基本身份验证(用户名和密码)连接到 Office/Microsoft365。 Microsoft 不再支持 EWS 中用于 Exchange Online 的基本身份验证。建议您使用 OAuth2.0 获取令牌,并在您的 EWS 客户端中使用该令牌连接到 Office 365。
为此,您必须在 Azure AD 中注册您的应用程序才能使用客户端凭据流。我使用控制台应用程序对此进行了 POC。
这里是 link 到 GitHub 的源代码和文档存储库。
在安全方面,EWS 与 office365 的连接似乎发生了一些变化,导致 Matt 的回答对我不起作用。
以下是起作用的:
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1)
{
Credentials = new WebCredentials("user", "password", "domain"),
Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx")
};
重要说明:
AutodiscoverUrl
没有成功完成,每次url都没有发现
user
必须是用户的完整电子邮件地址。
domain
是NetBIOS域名,意思就是只是域名。
您可以在 Settings -> Domains
下的 Microsoft 365 管理中心中找到域。最简单的方法是找到 domain.onmicrosoft.com
形式的回退域。只取 domain
部分。
用户必须是 Microsoft 365 管理员
这些参数之一的任何更改都会导致 Unauthorized
异常。
我在我的控制台应用程序中使用 EWS API 来处理邮箱项目,我的连接脚本看起来像
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
service.UseDefaultCredentials = true;
service.AutodiscoverUrl("emailService@domain.com");
但我发现我的电子邮件帐户已移动到 Office 365 云。我应该如何更改身份验证?
我找到了 EWS 服务 url
service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
但是我不知道怎么用
谢谢
您可以使用以下代码连接到 Office 365 上的 EWS:
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
service.Credentials = new WebCredentials("emailService@domain.com", "password");
service.AutodiscoverUrl("emailService@domain.com", RedirectionUrlValidationCallback);
您需要为Autodiscover Url 函数定义一个回调函数,如下所示:
private static bool RedirectionUrlValidationCallback(string redirectionUrl)
{
// The default for the validation callback is to reject the URL.
bool result = false;
Uri redirectionUri = new Uri(redirectionUrl);
// Validate the contents of the redirection URL. In this simple validation
// callback, the redirection URL is considered valid if it is using HTTPS
// to encrypt the authentication credentials.
if (redirectionUri.Scheme == "https")
{
result = true;
}
return result;
}
我知道这是一个相当古老的解决方案,但它对我仍然很有帮助。我有一些工具可以与 Exchange 的 "normal" 网络版本一起使用,但到目前为止,我对 Exchange Online 的测试失败了(我遇到了 "The Autodiscover service couldn't be located" 等错误)。
这里的重点是使用 WebCredentials 而不是 NetworkCredential 和电子邮件地址而不是用户名。
您现在无法在您的 EWS 应用程序中使用基本身份验证(用户名和密码)连接到 Office/Microsoft365。 Microsoft 不再支持 EWS 中用于 Exchange Online 的基本身份验证。建议您使用 OAuth2.0 获取令牌,并在您的 EWS 客户端中使用该令牌连接到 Office 365。
为此,您必须在 Azure AD 中注册您的应用程序才能使用客户端凭据流。我使用控制台应用程序对此进行了 POC。
这里是 link 到 GitHub 的源代码和文档存储库。
在安全方面,EWS 与 office365 的连接似乎发生了一些变化,导致 Matt 的回答对我不起作用。
以下是起作用的:
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1)
{
Credentials = new WebCredentials("user", "password", "domain"),
Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx")
};
重要说明:
AutodiscoverUrl
没有成功完成,每次url都没有发现user
必须是用户的完整电子邮件地址。domain
是NetBIOS域名,意思就是只是域名。 您可以在Settings -> Domains
下的 Microsoft 365 管理中心中找到域。最简单的方法是找到domain.onmicrosoft.com
形式的回退域。只取domain
部分。用户必须是 Microsoft 365 管理员
这些参数之一的任何更改都会导致
Unauthorized
异常。