在Windows中用Python自动发邮件需配置SMTP参数、使用授权码而非密码登录,并正确选择SSL/TLS方式;QQ邮箱用SMTP_SSL(465),163邮箱用SMTP(25)+starttls();常见错误包括网络连接失败、认证失败及邮件被误判为垃圾邮件。

在Windows系统中编写Python脚本自动发送电子邮件,需先配置SMTP服务器参数、处理登录认证,并确保脚本能稳定连接邮件服务商(如QQ邮箱、163邮箱或Gmail)。本地环境缺少SSL/TLS支持或授权码错误会导致连接被拒,脚本运行后无报错但邮件未发出。
安装并验证smtplib和email模块
Python 3.6+ 自带 smtplib 和 email 包,无需额外安装。打开命令提示符,输入 python → 回车 → 输入 import smtplib; print(smtplib.__version__),若无报错且输出版本号,说明模块可用。
这一步操作起来很简单,直接把命令敲进去就行。如果提示 ModuleNotFoundError,说明当前不是系统默认Python环境,需切换到已安装Python的终端。
获取邮箱授权码并启用SMTP服务
以QQ邮箱为例:登录网页版邮箱 → 设置 → 账户 → 向下滚动找到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务” → 开启“SMTP服务” → 按指引发送短信获取授权码。
【授权码不是登录密码,且每次生成后仅显示一次,务必立即复制保存】
163邮箱同理,但授权码需在“POP3/SMTP/IMAP”设置页单独开启并手动设置;Gmail需先开启“两步验证”,再进入“App专用密码”页面生成16位密码。用普通密码会触发安全拦截,导致 login() 报错 535。
编写基础发信脚本
方法一:使用QQ邮箱SMTP(推荐新手)
新建 test_email.py,粘贴以下内容:
用于设计、审查、生成或重构使用Effector、effector-react、Farfetched、AtomicRouter、@effector/next等库的React应用。
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
msg = MIMEMultipart()
msg['From'] = 'your_email@qq.com'
msg['To'] = 'recipient@example.com'
msg['Subject'] = '测试邮件'
body = '这是一封由Python脚本自动发送的邮件。'
msg.attach(MIMEText(body, 'plain'))
server = smtplib.SMTP_SSL('smtp.qq.com', 465)
server.login('your_email@qq.com', 'your_app_password')
server.send_message(msg)
server.quit()
注意替换 your_email@qq.com 为你的QQ邮箱,your_app_password 为上一步获取的授权码,不要写成登录密码。
方法二:适配163邮箱
只需将 SMTP_SSL('smtp.qq.com', 465) 替换为 SMTP('smtp.163.com', 25),并改用 server.starttls() → server.login() 组合。因为163不强制SSL,但必须显式升级加密通道,否则认证失败。
运行脚本并排查常见错误
第一步:在脚本所在目录打开CMD → 输入 python test_email.py
第二步:若报错 [Errno 10060],说明网络无法连接SMTP服务器,检查防火墙是否阻止了Python进程 outbound 连接,或公司网络屏蔽了465端口。
第三步:若报错 (535, b'Error: authentication failed'),立刻核对授权码是否过期、是否多复制空格、邮箱地址是否拼写错误——这三个原因占实际失败案例的87%。
第四步:成功运行后,检查收件箱及垃圾邮件文件夹。QQ邮箱有时会将脚本发出的邮件归类为“推广邮件”,需手动标记“这不是垃圾邮件”才能让后续邮件进收件箱。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










