Python通过Office365 SMTP Relay发信报SMTP AUTH扩展不支持错误如何解决?
你遇到的报错核心是Office 365 SMTP中继(选项3)采用IP信任机制,本身不支持SMTP AUTH身份验证,你代码中调用的s.login()方法和该服务的运行逻辑冲突,是报错的直接原因。
需要调整的配置及代码:
- 先确认基础配置正确:
- 你配置的是Microsoft 365入站连接器,且已正确将运行Python脚本的设备公网IP添加到连接器的允许IP列表
- 发件人所用域名是你租户内已完成验证的域名,SPF记录已正确添加对应IP段
- 调整Python代码,删除所有
s.login()相关逻辑,该中继模式不需要账号密码验证,直接通过IP信任完成鉴权 - 修正后的代码示例:
import smtplib from email.mime.text import MIMEText # 构造邮件 content = MIMEText("测试邮件内容") content["Subject"] = "SMTP中继测试" content["From"] = "john@XXMYMAILXX.com" content["To"] = "目标收件人地址" # 连接中继服务发信 with smtplib.SMTP("XXMYMAILXX-com.mail.protection.outlook.com.", 25) as server: server.starttls() # 无需调用login方法 server.sendmail(content["From"], [content["To"]], content.as_string())
额外校验项(如果调整代码后仍有问题):
- 确认发件人地址没有使用Outlook/Office 365公共域名,必须使用你租户的自定义验证域名
- 确认你的设备公网IP没有被Microsoft 365反垃圾邮件规则拦截,没有处于动态IP池内
- 确认25端口出网没有被你本地服务器运营商或防火墙拦截
内容的提问来源于stack exchange,提问作者Derik002
相关产品推荐
相关产品推荐

