Python3邮件发送避坑指南:根治SMTP连接中断与RFC协议错误
第一次用Python发送邮件时,我盯着屏幕上鲜红的"Connection unexpectedly closed"错误提示发呆了半小时。明明按照教程一步步操作,为什么连最基本的邮件发送都搞不定?后来才发现,网上90%的教程都漏掉了关键细节。本文将带你直击SMTP配置的核心痛点,用符合RFC标准的代码模板彻底解决这些恼人的问题。
1. SMTP连接失败的四大元凶
当你的Python脚本抛出"smtplib.SMTPException: Connection unexpectedly closed"时,别急着怀疑人生。这个看似简单的错误背后,通常隐藏着以下四种配置陷阱:
1.1 授权码失效:最容易被忽视的细节
很多开发者拿到授权码后直接粘贴到代码中,却忽略了QQ邮箱授权码的几个特殊规则:
- 16位随机字符 :真正的授权码是
kthdmtcxqabcdefg这样的格式,而不是邮箱密码 - 绑定设备限制 :每个授权码最多关联5台设备,超出后会自动失效
- 有效期问题 :未使用的授权码永久有效,但已使用的可能因安全策略被回收
检查授权码状态的正确姿势:
import smtplib
def check_auth_code(email, auth_code):
try:
with smtplib.SMTP_SSL("smtp.qq.com", 465) as server:
server.login(email, auth_code)
return True
except smtplib.SMTPAuthenticationError:
return False
1.2 端口选择:25/465/587的抉择之谜
QQ邮箱支持三种SMTP端口,但每种都有特定使用场景:
| 端口号 | 加密方式 | 适用场景 | 代码示例 |
|---|---|---|---|
| 25 | 明文/STARTTLS | 企业级邮件服务器 | smtplib.SMTP() |
| 465 | SSL/TLS | 个人应用首选(推荐) | smtplib.SMTP_SSL() |
| 587 |


683

被折叠的 条评论
为什么被折叠?



