当前位置: 首页 > 知识库问答 >
问题:

MailKit不成功的SMTP OAuth与Microsoft 365服务器

翟奇
2023-03-14

我正在使用MailKit 2.6.0.0连接到Microsoft 365,使用OAuth通过POP3、IMAP和SMTP进行身份验证。ImapClient和Pop3Client已成功验证,但SmtpClient未成功验证。以下是MailKit的协议日志:

Connected to smtp://smtp.office365.com:587/?starttls=always
S: 220 MN2PR04CA0011.outlook.office365.com Microsoft ESMTP MAIL Service ready at Sat, 30 May 2020 07:48:32 +0000
C: EHLO [192.168.1.240]
S: 250-MN2PR04CA0011.outlook.office365.com Hello [my-ip]
S: 250-SIZE 157286400
S: 250-PIPELINING
S: 250-DSN
S: 250-ENHANCEDSTATUSCODES
S: 250-STARTTLS
S: 250-8BITMIME
S: 250-BINARYMIME
S: 250-CHUNKING
S: 250 SMTPUTF8
C: STARTTLS
S: 220 2.0.0 SMTP server ready
C: EHLO [192.168.1.240]
S: 250-MN2PR04CA0011.outlook.office365.com Hello [my-ip]
S: 250-SIZE 157286400
S: 250-PIPELINING
S: 250-DSN
S: 250-ENHANCEDSTATUSCODES
S: 250-AUTH LOGIN XOAUTH2
S: 250-8BITMIME
S: 250-BINARYMIME
S: 250-CHUNKING
S: 250 SMTPUTF8
C: AUTH XOAUTH2 BASE64USERANDTOKEN
S: 535 5.7.3 Authentication unsuccessful [MN2PR04CA0011.namprd04.prod.outlook.com]
C: QUIT
S: 221 2.0.0 Service closing transmission channel

我已经打开了BASE 64USERANDTOKEN值,它看起来和成功的POP3/IMAP连接中提供的完全一样。我不知道SMTP身份验证不成功是由于微软365的错误配置还是协议对话中的问题造成的。我正在使用作为MSDN订阅的好处提供的Microsoft 365开发人员订阅。我找不到任何特定于SMTP的配置设置,并且在交换访问权限的授权代码时使用了正确的范围(https://outlook.office365.com/SMTP.Send}。我也无法在Microsoft 365中找到任何有助于诊断问题的错误日志条目。

至于协议对话,我注意到微软在https://docs.microsoft.com/en-gb/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth

[connection begins]
C: auth xoauth2
S: 334
C: dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlYXJlciB5YTI5LnZGOWRmdDRxbVRjMk52YjNSbGNrQmhkSFJoZG1semRHRXVZMjl0Q2cBAQ==
S: 235 2.7.0 Authentication successful
[connection continues...]

不同于谷歌的athttps://developers.google.com/gmail/imap/xoauth2-protocol这与MailKit协议日志类似:

[connection begins]
S: 220 mx.google.com ESMTP 12sm2095603fks.9
C: EHLO sender.example.com
S: 250-mx.google.com at your service, [172.31.135.47]
S: 250-SIZE 35651584
S: 250-8BITMIME
S: 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2
S: 250-ENHANCEDSTATUSCODES
S: 250 PIPELINING
C: AUTH XOAUTH2 dXNlcj1zb21ldXNlckBleGFtcGxlLmNvbQFhdXRoPUJlYXJlciB5YTI5LnZGOWRmdDRxbVRjMk52YjNSbGNrQmhkSFJoZG1semRHRXVZMjl0Q2cBAQ==
S: 235 2.7.0 Accepted
[connection continues...]

这可能是授权失败的原因吗?

共有1个答案

景宏富
2023-03-14

找到身份验证失败的实际原因。正如在最初的帖子中提到的,我正在使用我的Microsoft 365开发者订阅,这给了我一个类似Schlagermier的域。微软。com(不是真的,伙计们)。我进入了该账户的微软365管理门户,获得了“引导配置”体验或类似体验。这是一种向导ui,由一系列网页组成。其中一个页面有一个带有两个单选按钮的“选择域”。一个按钮的标签是“Use schlagermier.onmicrosoft.com”,另一个是“Enter domain”,带有一个输入框,用于您已经注册并拥有的域(例如schlagermier.com)。因此,您似乎必须显式地设置一个域,让SMTP工作,这是有意义的。我只是假设会使用onmicrosoft域。

 类似资料:
  • 我正在为我的团队使用MEAN stack(MongoDB、Express、Angular和Node)创建的网站设置LDAP身份验证。然而,我的绑定不成功。 这项工作已在Windows 10上完成。我在跟踪ldap时遇到问题。用于客户端集成的js文档,但发现了一个Github问题,似乎很有希望。我认为我的问题在于绑定API。我的理解是,我需要在服务器上给它一些东西(我使用我的mailNickname

  • CLI for Microsoft 365 One CLI for Microsoft 365 CLI for Microsoft 365 helps you manage your Microsoft 365 tenant and SharePoint Framework projects. Website | Features | Install | Usage | Build | Contr

  • 在 Node.js 服务器中使用时相当简单直接,例如Express: npm install express --save const Vue = require('vue') const server = require('express')() const renderer = require('vue-server-renderer').createRenderer() server.g

  • 问题内容: 我想澄清一下我是否正确理解了ServiceStack.Server功能。 在此页面上,描述了ServiceStack.Server API,并指出: 创建一个Redis MQ服务器,在其自己的后台线程上处理每个消息 当我以为这是一台独立的Redis服务器时是否正确?因此,如果我使用下面的代码启动它,则我正在运行一台功能齐全的Redis服务器,这意味着无需安装Redis软件或Memura

  • 我试图理解Spring MVC Restful架构。想知道有多少种方法可以将SpringMVC与RESTfulWeb服务集成在一起。我可以看到其中一个是使用Rest模板。 这是在Spring MVC中使用rest Web服务的唯一方法吗? 我们可以单独使用SpringMVC开发web应用程序而不使用任何web服务吗。 如果我说错了,请指正。 谢谢你的帮助。

  • 问题内容: 我有一个角度应用程序,其中包含一个从示例中获取的保存按钮: 这对于客户端验证非常有用,因为当用户解决问题时它会变为false,但是我有一个电子邮件字段,如果另一个用户使用相同的电子邮件注册,则该字段设置为无效。 一旦我将电子邮件字段设置为无效,就无法提交表单,并且用户无法修复该验证错误。所以现在我不能再使用来禁用我的提交按钮。 肯定有更好的办法 问题答案: 我在几个项目中都需要这样做,