已启用SMTP auth仍报smtplib.SMTPAuthenticationError(535)问题咨询
Python smtplib对接Outlook SMTP报535认证失败解决方法
报错信息
File "C:\Users\SanketPatil\AppData\Local\Programs\Python\Python38\lib\smtplib.py", line 655, in auth raise SMTPAuthenticationError(code, resp) smtplib.SMTPAuthenticationError: (535, b'5.7.139 Authentication unsuccessful, the request did not meet the criteria to be authenticated successfully. Contact your administrator. [PN2PR01CA0009.INDPRD01.PROD.OUTLOOK.COM]') Process finished with exit code 1
前置条件:已在邮箱设置中手动开启SMTP Auth配置,仍触发上述报错。
排查解决步骤
- 核实账号权限:如果使用的是企业/学校下发的Microsoft 365账号,个人端开启SMTP Auth不生效。微软2021年后默认对所有新租户禁用SMTP基本认证,需要联系租户管理员在Exchange管理中心,给对应账号单独开启「已验证SMTP」权限,同时在Azure AD条件访问策略中放开该账号使用SMTP基本认证的限制。
- 调整认证凭据:如果账号开启了双重验证(MFA),不能直接使用账号登录密码走SMTP认证,需要到Microsoft账号安全中心生成应用专用密码,代码中
login()方法的密码字段传入这个16位专用密码即可。 - 核对连接配置:不要使用错误的服务器地址、端口和加密方式,Outlook/365 SMTP正确连接参数为服务器地址
smtp.office365.com、端口587,连接后必须调用starttls()启用显式TLS加密,目前新账号已经不支持465端口的隐式SSL连接。最小可运行参考代码:
import smtplib from email.mime.text import MIMEText # 配置项 smtp_host = "smtp.office365.com" smtp_port = 587 sender_addr = "你的完整邮箱地址" auth_pwd = "你的登录密码/应用专用密码" receiver_addr = "收件人邮箱地址" # 构造邮件 mail = MIMEText("测试邮件正文", "plain", "utf-8") mail["From"] = sender_addr mail["To"] = receiver_addr mail["Subject"] = "测试邮件标题" # 连接发送 with smtplib.SMTP(smtp_host, smtp_port, timeout=10) as s: s.ehlo() s.starttls() # 必须执行TLS握手 s.ehlo() s.login(sender_addr, auth_pwd) s.sendmail(sender_addr, receiver_addr, mail.as_string())
- 解除账号风控:如果账号近期存在异地登录、异常发信记录,微软会临时封禁SMTP权限。先通过浏览器登录Outlook网页端,按照页面提示完成安全验证(手机号校验、确认本人登录),解除风控限制后再重试代码发信。
- 排查网络问题:如果当前网络挂了代理、VPN,或者使用云服务器公网IP连接,大概率会被微软判定为风险IP拦截。切换到普通家用网络、关闭代理后重试,不要直接用云服务器默认IP批量发信。
- 校验发件人一致性:代码中登录用的邮箱账号,必须和邮件头
From字段填写的地址完全一致,不要直接用别名邮箱、共享邮箱地址作为登录凭据;如果需要用共享邮箱发信,要给登录的主账号授予「发送方式」权限,用主账号凭据登录后再指定共享邮箱为发件人。
内容的提问来源于stack exchange,提问作者Sanket Patil
相关产品推荐
相关产品推荐

