是否可以将 OAuth 2.0 用于 Office365 SMTP?

Is it possible to use OAuth 2.0 for Office365 SMTP?

我有一个内部编写的用于发送电子邮件的电子邮件应用程序。我们已将其设置为可以毫无问题地将 OAuth 2.0 与 GMail(个人和企业帐户)和 Outlook.com 帐户一起使用的选项。

我们也可以使用用户 ID 和密码进行身份验证,但我们更喜欢 OAuth 2.0,因为我们不会以这种方式在任何地方保存密码。

我们现在收到针对 Office365 帐户执行此操作的请求。

我注意到 Office365 smtp 服务器(smtp.office365.com 端口 587)上的 hello 消息不提供 XOAUTH2 选项。

250-BY2PR0601CA0005.outlook.office365.com Hello [xx.xx.xx.xx]
250-SIZE 157286400
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-AUTH LOGIN
250-8BITMIME
250-BINARYMIME
250 CHUNKING

但是,outlook.com 的 SMTP 服务器会:

250-BLU436-SMTP14.smtp.hotmail.com Hello [xx.xx.xx.xx]
250-TURN
250-SIZE 41943040
250-ETRN
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-8bitmime
250-BINARYMIME
250-CHUNKING
250-VRFY
250-AUTH LOGIN PLAIN XOAUTH2
250 OK

Office365可以吗?如果没有,我们能否将 Office365 用户指向 outlook.com smtp 服务器 (smtp-mail.outlook.com) 还是它们完全不同?

如果可能,我们不希望仅将 API 用于发送电子邮件,因为每个提供商的 RESTful API 当然会大不相同。

使用 Office365 帐户发送电子邮件时使用 OAuth 2.0 的原因是我们不想在我们的服务器上存储密码。此外,如果用户更改了密码,除非他们告诉我们或在我们的系统端手动更新,否则我们不会知道。

使用 OAuth 2.0 这将解决这个问题并允许应用程序像其他电子邮件提供商一样流动。

真的也想要这个功能。它将使需要发送邮件的 Office365 应用程序变得更加容易!

我做了一些搜索,发现 这似乎与我们将要得到的官方答案非常接近(答案是肯定的否定)。

我为桌面应用程序使用 javax.Mail 和 OAuth 制作了一个示例。它打开登录屏幕以获取 acccessToken。我遵循了多个说明,所以可能是 JavaMail 中的权限和道具太多,但我成功发送了邮件。

My example program (Github)

不确定我是否遗漏了什么,但这不是您想要的吗?看起来这是二月份发布的。有趣的是,这篇文章说 M365 支持 Oauth,但不支持 outlook.com 用户。

https://docs.microsoft.com/en-us/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth