SMTP认证失败主因是凭据或服务端配置不匹配:需用应用专用密码而非登录密码,确保SMTP服务已开启,并正确配置服务商对应的主机、端口及加密方式(如Gmail用smtp.gmail.com:587+STARTTLS),同时检查系统时间、调试日志及发件人地址一致性。

SMTP 认证失败的常见原因和快速排查路径
绝大多数 Authentication failed 错误不是代码写错了,而是凭据或服务端配置没对上。先确认你用的是正确的账号类型(普通邮箱账号?应用专用密码?)和对应的服务端地址与端口。Gmail、Outlook、QQ 邮箱等主流服务商现在基本都不允许直接用账户密码登录 SMTP,必须启用“应用专用密码”或“开启 SMTP 服务”并配合 OAuth2(高级场景)。
smtplib.SMTPAuthenticationError 的典型触发条件
这个异常通常在调用 server.login() 时抛出,背后可能有这几个具体问题:
- 密码填的是邮箱登录密码,但服务商要求用「应用专用密码」(如 Gmail 开启两步验证后生成的 16 位密码)
- 账号未开启 SMTP 服务(例如 QQ 邮箱需在「设置 → 账户 → POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务」里手动开启 SMTP)
- 使用了错误的 SMTP 主机或端口:比如用
smtp.gmail.com却配了 QQ 邮箱的端口587,而 Gmail 要求587(STARTTLS)或465(SSL) - 账号被临时锁定或限制登录(尤其在异地、新设备首次使用 SMTP 时,部分服务商会拦截)
不同邮箱服务商的最小可用配置示例
以下是最简能跑通的参数组合,注意替换 your_email 和 your_app_password:
Gmail(需开启两步验证 + 应用专用密码):smtp_server = "smtp.gmail.com"port = 587server.starttls() 必须调用server.login("your_email@gmail.com", "your_app_password")
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
QQ 邮箱(需在网页端开启 SMTP 并获取授权码):smtp_server = "smtp.qq.com"port = 587server.starttls() 或 port = 465 + server = smtplib.SMTP_SSL(...)server.login("your_email@qq.com", "your_authorization_code")(不是 QQ 密码)
Outlook / Hotmail:smtp_server = "smtp-mail.outlook.com"port = 587server.starttls()server.login("your_email@outlook.com", "your_app_password")(同样需应用密码)
调试时容易忽略的细节
很多人试了几次就放弃,其实关键点藏在日志和网络行为里:
立即学习“Python免费学习笔记(深入)”;
- 不要只看 Python 报错,用
server.set_debuglevel(1)打开 SMTP 协议级日志,能看到服务器返回的真实响应码(比如535 5.7.8表示认证失败,530 5.7.0可能是未开启服务) - 确保运行脚本的机器时间准确——证书校验失败也会伪装成认证失败,尤其是系统时间快/慢超过几分钟时
- 某些企业邮箱或自建 SMTP 服务强制要求发件人地址和登录账号完全一致,否则
sendmail()阶段才报错,但根源仍是认证上下文不匹配 - 如果用的是公司邮箱或教育邮箱,大概率走的是内部 SMTP 网关,不能套用公网服务商配置,得找 IT 部门要真实 host/port/认证方式

















