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

Python3 smtplib连接smtp.office365.com报535认证失败错误

故障诱发原因

这个535 5.7.3 Authentication unsuccessful报错和代码逻辑本身无关,核心触发原因如下:

  • 微软已逐步对所有个人Outlook/Hotmail邮箱下线SMTP基础账号密码认证能力,之前脚本稳定运行半年是因为账户处于灰度兼容过渡期,过渡期结束后所有用原始登录密码调用SMTP的请求都会被直接拦截。
  • 其他会触发同报错的常见原因:
    • 近期修改过邮箱登录密码,代码中硬编码的旧密码未同步更新
    • 脚本运行IP触发微软安全风控:比如长期未通过网页端登录邮箱、脚本登录IP和常用登录地差异过大、短时间发信量异常被判定为垃圾发信,临时封禁SMTP权限
    • 邮箱设置中手动关闭了POP/IMAP/SMTP的允许接入开关
修复方案

按以下优先级依次排查处理:

  1. 先排查基础配置问题
    • 核对代码中填写的账号密码和网页端可正常登录的密码完全一致,注意排查大小写错误、首尾多余空格问题
    • 登录Outlook网页端,进入「设置-邮件-同步电子邮件」页面,确认「允许设备和应用使用POP/IMAP/SMTP」选项为开启状态
    • 网页端完成一次完整登录,检查是否有异常登录提醒、安全验证弹窗,按提示完成手机号/邮箱验证,解除临时风控
  2. 替换认证方式(核心修复步骤,针对微软下线基础密码认证的问题)
    • 进入Outlook账户安全设置页,开启双重验证(两步验证),这是生成应用专用密码的强制前置条件
    • 双重验证开启后,在同一安全设置页找到「应用密码」入口,新建一个专门给邮件脚本使用的应用专用密码
    • 将代码中passwd字段的原始邮箱登录密码,替换为刚生成的16位应用专用密码即可,不需要修改现有代码里的SMTP地址、端口、TLS配置
  3. 验证修复
    替换完成后重新运行脚本即可正常发信,核心登录段代码无需额外调整,参考如下:
server = smtplib.SMTP('smtp.office365.com', 587)
server.ehlo()
server.starttls()
server.login(user, passwd) # 此处passwd填入生成的应用专用密码,而非账户登录密码
server.sendmail(sender, receiver, msg.as_string())
server.quit()

注意:不要尝试将SMTP服务器替换为旧版smtp.live.com,该旧服务器已经全量下线,会直接返回连接错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:09:19