C# 连接到office 365邮箱

C# 连接到office 365邮箱,c#,office365,office365api,C#,Office365,Office365api,我正在开发一个C#应用程序,它可以访问office 365中当前用户的邮箱,但无法通过身份验证阶段。 我用的是这个例子 这样的代码在连接本地Exchange邮箱时工作正常,但由于某些原因无法与office 365配合使用。我尝试使用此处提供的解决方案,结果相同: 基础架构描述: 我们公司使用混合Exchange设置:有些邮箱位于本地Exchange服务器上,有些已迁移到Office 365。我们还安装了Microsoft ADFS服务器,用于office 365身份验证。 当我在浏览器中打开OW

我正在开发一个C#应用程序,它可以访问office 365中当前用户的邮箱,但无法通过身份验证阶段。 我用的是这个例子

这样的代码在连接本地Exchange邮箱时工作正常,但由于某些原因无法与office 365配合使用。我尝试使用此处提供的解决方案,结果相同:

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

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

我正在努力实现的目标:

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

  • 如果您试图使用EWS API连接到Office 365邮箱,请查看以下内容:

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

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

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

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