Outlook SMTP 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

我一直在尝试在一个遗留应用程序中实现电子邮件功能,在从开始获得令牌后,使用添加OAuth支持

沿着这条路线,我添加了
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