繁体   English   中英

通过 EWS API 连接到 Office 365

[英]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 服务网址

 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);

您需要为 AutodiscoveryUrl 函数定义一个回调函数,如下所示:

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 的“普通”网络版本一起使用,但到目前为止,我对 Exchange Online 的测试失败了(我遇到了“无法找到自动发现服务”等错误)。

此处必不可少的是使用 WebCredentials 而不是 NetworkCredential 和电子邮件地址而不是用户名。

现在无法在 EWS 应用程序中使用基本身份验证(用户名和密码)连接到 Office/Microsoft 365。 Microsoft 不再支持 EWS for Exchange Online 中的基本身份验证。 建议您使用 OAuth2.0 获取令牌并在 EWS 客户端中使用相同的令牌连接到 Office 365。

为此,您必须在 Azure AD 中注册您的应用程序才能使用客户端凭据流。 我使用控制台应用程序对此进行了 POC。 在此处输入图片说明

在此处输入图片说明

这是指向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必须是user完整电子邮件地址

  • domainNetBIOS 域名,意思是它只是域名。 您可以在 Microsoft 365 管理中心的Settings -> Domains下找到该域。 最简单的方法是以domain.onmicrosoft.com的形式查找回退域。 只取domain部分。

  • 用户必须是 Microsoft 365 管理员

  • 这些参数之一的任何更改都会导致Unauthorized例外。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM