Outlook SMTP Oauth发送-身份验证失败
我一直在尝试在一个遗留应用程序中实现电子邮件功能,在从开始获得令牌后,使用添加OAuth支持 沿着这条路线,我添加了Outlook SMTP Oauth发送-身份验证失败,outlook,azure-active-directory,office365,mailkit,smtp-auth,Outlook,Azure Active Directory,Office365,Mailkit,Smtp Auth,我一直在尝试在一个遗留应用程序中实现电子邮件功能,在从开始获得令牌后,使用添加OAuth支持 沿着这条路线,我添加了SMTP.Send和许多其他API权限来查找缺失的部分。(包括{“User.Read”、“User.ReadBasic.All”、“SMTP.Send”、“offline_access”、“Mail.Send”},以免丢失一个) 我一直在测试,以建立一个概念证明 到目前为止,我有以下代码片段,在尝试进行身份验证后失败 public void SendSmtpMessageAsync
SMTP.Send
和许多其他API权限来查找缺失的部分。(包括{“User.Read”、“User.ReadBasic.All”、“SMTP.Send”、“offline_access”、“Mail.Send”}
,以免丢失一个)
我一直在测试,以建立一个概念证明
到目前为止,我有以下代码片段,在尝试进行身份验证后失败
public void SendSmtpMessageAsync(string id, string accessToken)
{
var message = new MimeMessage();
message.From.Add(new MailboxAddress("From Name", "From Address@Example.com"));
message.To.Add(new MailboxAddress("To Name", "To Address@Example.com"));
message.Subject = "How you doin'?";
message.Body = new TextPart("plain")
{
Text = @"Test Email Content"
};
using (var client = new SmtpClient(new ProtocolLogger(Console.OpenStandardOutput())))
{
try
{
client.Connect("smtp.office365.com", 587, SecureSocketOptions.StartTls);
var oauth2 = new SaslMechanismOAuth2(id, accessToken);
var temp = client.AuthenticationMechanisms;
client.Authenticate(oauth2);
client.Send(message);
client.Disconnect(true);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
}
邮箱日志 我已经启用了日志记录,并获得了一个日志,显示客户端正在连接而不是发送令牌进行身份验证,但身份验证失败
Connected to smtp://smtp.office365.com:587/?starttls=always
S: 220 MW3PR05CA0003.outlook.office365.com Microsoft ESMTP MAIL Service ready at Mon, 25 May 2020 21:31:07 +0000
C: EHLO [192.168.0.7]
S: 250-MW3PR05CA0003.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.0.7]
S: 250-MW3PR05CA0003.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 <<Token omitted but I have confirmed that it is Base64 encoded and
in the format of base64("user=" + userName + "^Aauth=Bearer " + accessToken + "^A^A")>>
S: 535 5.7.3 Authentication unsuccessful [MW3PR05CA0003.namprd05.prod.outlook.com]
MailKit.Security.AuthenticationException: 535: 5.7.3 Authentication unsuccessful
[MW3PR05CA0003.namprd05.prod.outlook.com]
已连接到smtp://smtp.office365.com:587/?starttls=always
S:220 MW3PR05CA0003.outlook.office365.com Microsoft ESMTP邮件服务于2020年5月25日星期一21:31:07+0000准备就绪
C:EHLO[192.168.0.7]
S:250-MW3PR05CA0003.outlook.office365.com您好[]
S:250号157286400
S:250-流水线
S:250-DSN
S:250-EnhancedStatus代码
S:250-STARTTLS
S:250-8比特
S:250-BINARYMIME
S:250分块
S:250 SMTPUTF8
C:开始
S:220 2.0.0 SMTP服务器就绪
C:EHLO[192.168.0.7]
S:250-MW3PR05CA0003.outlook.office365.com您好[]
S:250号157286400
S:250-流水线
S:250-DSN
S:250-EnhancedStatus代码
S:250-AUTH登录XOAUTH2
S:250-8比特
S:250-BINARYMIME
S:250分块
S:250 SMTPUTF8
C:AUTH XOAUTH2
S:535.7.3身份验证未成功[MW3PR05CA0003.namprd05.prod.outlook.com]
MailKit.Security.AuthenticationException:535:5.7.3身份验证失败
[MW3PR05CA0003.namprd05.prod.outlook.com]
任何方向或资源都将受到赞赏,因为大多数现有的职位都是从2020年之前添加传统SMTP支持时开始的。此外,如果您发现任何误解,请告诉我,以便我可以做一些额外的阅读。我有一个类似的问题,这是由我对Microsoft 365的错误配置引起的。详情请参阅。希望这能有所帮助。在进行了大量搜索并试图与微软对话后,我被指向了另一篇文章的答案方向。(我添加了一个POP3调用,其格式与OP中的SMTP调用的格式相同。)据说包含范围
https://outlook.office.com/POP.AccessAsUser.All
因此,在替换了POP.AccessAsUser.All
之后,我在SMTP和POP3调用之前的所有调用都使用了现代身份验证
此外,现在我知道了答案,我看到它被记录在微软的文档中,以验证这是正确的解决方案 在授权应用程序和请求访问令牌时,请确保指定完整的作用域,包括Outlook资源URL
希望这能帮助其他面临同样问题的人谢谢你提供的额外途径。不幸的是,在添加域后,我仍然会遇到相同的错误。!!!!这就是解决方案!!!!!!mods保持删除我的方式如何解决这个问题:打开Microsoft 365管理中心,进入用户>活动用户。选择用户,然后在显示的弹出按钮中单击“邮件”。在电子邮件应用部分,单击管理电子邮件应用。验证已验证的SMTP设置:未选中=已禁用,选中=已启用。完成后,单击保存更改。
| Protocol | Permission scope string
|-----------|-------------------------------------
| IMAP | https://outlook.office.com/IMAP.AccessAsUser.All
| POP | https://outlook.office.com/POP.AccessAsUser.All
| SMTP AUTH | https://outlook.office.com/SMTP.Send