我正在使用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#示例。
目标,我试图实现:
答案 0 :(得分:0)
如果您尝试使用 EWS API 连接到 Office 365 邮箱,请查看:
您现在无法在 EWS 应用程序中使用基本身份验证(用户名和密码)连接到 Office/Microsoft 365。 Microsoft 不再支持 EWS for Exchange Online 中的基本身份验证。建议您使用 OAuth2.0 获取令牌,并在您的 EWS 客户端中使用该令牌连接到 Office 365。
为此,您必须在 Azure AD 中注册您的应用程序才能使用客户端凭据流。我使用控制台应用程序对此进行了 POC。
这是指向 GitHub 源代码和文档存储库的链接。