You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用.NET 6 + MailKit连接Office365 SMTP发送邮件时遭遇535:5.7.139认证失败错误求助

.NET 6 + MailKit连接Office365 SMTP发送邮件时遭遇535:5.7.139认证失败错误求助

看起来你遇到的是Office365安全策略限制导致的SMTP认证问题,错误提示里的“security defaults policy”是核心线索,我来帮你梳理几个实用的排查和解决方向:

  • 检查组织的安全默认值策略
    Office365的安全默认值(Security Defaults)会强制启用包括MFA(多因素认证)在内的安全措施,这时候传统的“用户名+密码”SMTP认证就会失效——哪怕你没看到用户被锁定,这个策略也会直接阻止非现代认证方式的访问。
    管理员可以登录Azure AD后台,进入「安全」>「安全默认值」查看是否开启了该策略:如果开启了,要么临时关闭(不推荐长期使用),要么改用下文提到的应用密码或现代认证方案。

  • 改用应用密码替代普通账户密码
    如果你的组织强制要求MFA,直接用用户的日常密码进行SMTP认证肯定行不通。这时候需要给对应用户创建一个应用密码(App Password),然后在代码里用这个应用密码替换原来的账户密码。
    创建步骤:用户登录Microsoft 365账户,进入「我的账户」>「安全信息」>「添加方法」>「应用密码」,生成后务必保存好——因为应用密码只会显示一次。

  • 确认Authenticated SMTP的配置生效
    你提到已经开启了Authenticated SMTP,要确保是在正确的路径配置:

    1. 管理员登录Microsoft 365管理中心,找到对应的用户
    2. 进入「邮件」>「电子邮件应用」>「Authenticated SMTP」,设置为「启用」
      注意:这个配置更改可能需要15-30分钟才会生效,不要刚设置完就立刻测试。
  • 优化SMTP端口与加密配置
    Office365官方推荐使用端口587 + StartTls加密方式,端口25可能被你的组织或ISP屏蔽,建议优先固定用587。代码里的SecureSocketOptions.StartTls是正确的,不要换成SslOnConnect(那是端口465的配置方式)。

  • 移除XOAUTH2认证机制
    你代码里注释掉了client.AuthenticationMechanisms.Remove("XOAUTH2");,建议取消注释这行。因为MailKit默认会优先尝试XOAUTH2认证,但Office365的普通SMTP认证并不兼容这个机制,移除后会强制使用传统的用户名密码认证流程,避免不必要的干扰。

调整后的代码示例:

using var client = new SmtpClient();
try
{
    client.Connect(_emailConfig.SmtpServer, _emailConfig.Port, MailKit.Security.SecureSocketOptions.StartTls);
    // 移除XOAUTH2认证机制,避免干扰传统用户名密码认证
    client.AuthenticationMechanisms.Remove("XOAUTH2");
    // 若使用应用密码,此处替换为生成的应用密码
    client.Authenticate(_emailConfig.UserName, _emailConfig.Password);
    client.Send(mailMessage);
}
catch (Exception ex)
{
    // 建议记录详细错误信息,方便后续排查
    Console.WriteLine($"邮件发送失败:{ex.Message}");
    throw;
}
finally
{
    client.Disconnect(true);
    client.Dispose();
}

备注:内容来源于stack exchange,提问作者Pawan Nogariya

火山引擎 最新活动