连接到office 365邮箱

时间:2017-12-28 13:03:45

标签: c# office365 office365api

我正在使用C#应用程序来访问Office 365中当前用户的邮箱,但无法通过身份验证阶段。 我正在使用此示例https://msdn.microsoft.com/en-us/library/office/dn567668(v=exchg.150).aspx

    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
    service.UseDefaultCredentials = false;
    //Specify login which works when connecting to Office 365 web UI
    service.Credentials = new WebCredentials("office_365_login@domain", "password");

    //would fail here with 401 unauthorised
    service.AutodiscoverUrl("email_address", RedirectionUrlValidationCallback);

    //As an alternative to autodiscover, I've tried to specify endpoint explicitly
    service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx")

    EmailMessage email = new EmailMessage(service);
    ...//Set email info
    //Would fail with 401 unauthorised
    email.Send();

此类代码在连接本地Exchange邮箱时工作正常,但由于某种原因无法与Office 365一起使用。我尝试过使用此处提供的解决方案,结果相同:Connection to Office 365 by EWS API

基础架构说明: 我们公司使用混合Exchange设置:某些邮箱位于本地Exchange服务器上,有些已迁移到Office 365.我们还安装了Microsoft ADFS服务器,用于Office 365身份验证。 当我在浏览器中打开OWA URL时,我首先被重定向到我们的ADFS服务器,如果我使用的是域帐户,我将透明度重定向到https://outlook.office.com/owa/,否则我就会“{3}}。我被要求在我们的ADFS服务器上提供凭证。

问题: 是否可以通过显式指定凭据来连接Office 365邮箱,如代码示例中所示?或者我应该从ADFS服务器获取令牌并使用它来连接到Office 365?我还没有找到后者的C#示例。

目标,我试图实现:

  1. 完美的场景。如果用户使用域帐户运行应用程序, 应用程序应该能够访问他的邮箱而无需指定 凭证明确
  2. 可接受的情况。用户必须按顺序显式设置凭据 用于访问邮箱的应用程序

1 个答案:

答案 0 :(得分:0)

如果您尝试使用 EWS API 连接到 Office 365 邮箱,请查看:

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

为此,您必须在 Azure AD 中注册您的应用程序才能使用客户端凭据流。我使用控制台应用程序对此进行了 POC。 enter image description here

enter image description here

这是指向 GitHub 源代码和文档存储库的链接。