You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Office 365 535 5.7.3认证失败及Azure部署的.NET Core邮件发送问题求助

解决Azure Web App中O365 SMTP认证失败/超时的问题

嘿,针对你遇到的这个问题——先是ASP.NET Core 1.1用MailKit连O365 SMTP一直报535认证失败,迁到.NET Core 2.0用原生SmtpClient又超时,关了EnableSsl又提示未加密——我整理了几个实战过的排查方向和解决方案,你可以挨个试试:

一、先从O365账号的安全配置入手

  1. 确认SMTP AUTH是否开启
    很多O365租户现在默认会关闭普通账号的SMTP AUTH功能,尤其是新创建的账号。你可以登录Exchange管理员中心,找到对应账号的邮件设置,检查「POP、IMAP和SMTP」选项里,SMTP AUTH是不是处于启用状态。如果是关的,打开它再测试。
  2. 检查多因素认证(MFA)
    如果你的账号开了MFA,直接用账号密码登录SMTP肯定会失败。这种情况得去Microsoft 365 admin center,找到账号的安全设置,生成一个应用密码,替换代码里的原密码再试——应用密码是专门给不支持MFA的客户端用的。
  3. 排查租户的条件访问策略
    有些租户会设置条件访问规则,限制非信任位置/设备的SMTP登录。你可以去Azure AD的条件访问面板看看,有没有针对SMTP协议的限制;或者临时把Azure Web App的出站IP(在Web App属性里能看到)加到信任IP列表里测试下。

二、检查Azure Web App的网络配置

  1. 确认587端口是否开放
    O365 SMTP用的是587端口,得确保Azure Web App的出站流量没被限制。你可以在Azure门户的Web App「网络」->「出站流量」里检查,587端口是不是允许的。另外,Web App的出站IP列表也可以在「属性」里找到,把这些IP加到O365的允许列表里试试。
  2. 尝试VNet集成或专用端点
    如果你的Web App在隔离环境(比如App Service环境)里,可能是网络隔离导致连不上O365。可以试试配置VNet集成,让Web App通过虚拟网络访问外部资源;如果租户支持,也可以用O365的专用端点来访问。

三、代码层面的优化调整

  1. MailKit的调整(如果想回去用的话)
    虽然你换了原生SmtpClient,但如果想再试MailKit,可以加个超时时间,并且明确指定认证机制:
    using (var client = new SmtpClient())
    {
        client.Timeout = 10000; // 设置10秒超时,避免无限等待
        await client.ConnectAsync("smtp.office365.com", 587, SecureSocketOptions.StartTls).ConfigureAwait(false);
        client.AuthenticationMechanisms.Remove("XOAUTH2");
        // 强制使用PLAIN或LOGIN认证,避免自动选到不兼容的机制
        client.Authenticate(Constants.AccountData.Login, Constants.AccountData.Password);
        await client.SendAsync(mimeMessage).ConfigureAwait(false);
        await client.DisconnectAsync(true).ConfigureAwait(false);
    }
    
  2. 原生SmtpClient的正确配置
    给你一个验证过的原生SmtpClient配置,符合O365的要求:
    using (var client = new System.Net.Mail.SmtpClient())
    {
        client.Host = "smtp.office365.com";
        client.Port = 587;
        client.EnableSsl = true;
        client.UseDefaultCredentials = false;
        client.Credentials = new System.Net.NetworkCredential(Constants.AccountData.Login, Constants.AccountData.Password);
        client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
        client.Timeout = 10000; // 加超时,避免卡死
        await client.SendMailAsync(mailMessage).ConfigureAwait(false);
    }
    
    别手动设置TargetName,原生SmtpClient在启用SSL时会自动处理这个参数,手动设置反而可能出问题。

四、其他排查小技巧

  1. 用Kudu控制台测Telnet连接
    登录Azure Web App的Kudu控制台,打开CMD终端,输入telnet smtp.office365.com 587,看能不能连上。连不上就是网络问题;能连上的话,再输入EHLO localhost,然后AUTH LOGIN,输入base64编码的账号密码,看认证会不会失败——这样能快速定位是网络还是认证的问题。
  2. 查O365的审计日志
    去Exchange管理员中心的「合规性」->「审计日志」,搜索这个账号的SMTP登录记录,里面会有详细的失败原因,比如是不是账号被锁定、触发了安全策略之类的。

应该能从这些方向找到问题所在,要是还有其他细节可以补充,咱们再接着聊~

内容的提问来源于stack exchange,提问作者MPILI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:01:47