Python使用QQ邮箱SMTP发送邮件 详细教程
Python通过QQ邮箱SMTP服务器发送邮件,手把手教开启SMTP服务、获取授权码、配置smtp.qq.com:465,附完整可运行代码与常见报错。
场景痛点
想用自己的QQ邮箱发自动通知,但直接拿QQ密码去登录SMTP总是报错"535 Login Fail"。QQ邮箱从2016年起就不允许用网页密码登录SMTP,必须开独立授权码。这篇把整个开通流程、代码配置、常见报错一次讲清。
用到的库
# smtplib/email标准库,无需安装
完整代码
# -*- coding: utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# QQ邮箱SMTP配置(固定)
SMTP_SERVER = "smtp.qq.com"
SMTP_SSL_PORT = 465 # SSL端口,推荐
SMTP_TLS_PORT = 587 # STARTTLS端口,备选
# 改成你自己的QQ邮箱
SENDER = "123456789@qq.com"
# 注意:这里填的是【授权码】,不是QQ登录密码!
AUTH_CODE = "xxxxxxxxxxxxxxxx" # 16位授权码
RECEIVER = "receiver@example.com"
def send_via_qq():
msg = MIMEText("你好,这是通过QQ邮箱SMTP发出的邮件。", "plain", "utf-8")
msg["From"] = Header(f"我的QQ邮箱 <{SENDER}>", "utf-8")
msg["To"] = Header(RECEIVER, "utf-8")
msg["Subject"] = Header("QQ邮箱SMTP测试", "utf-8")
# 方式一:465端口 SSL,最简单稳定
server = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_SSL_PORT)
server.login(SENDER, AUTH_CODE)
server.sendmail(SENDER, [RECEIVER], msg.as_string())
server.quit()
print("QQ邮箱邮件发送成功")
# 方式二:587端口 STARTTLS(被封465时换这个)
# server = smtplib.SMTP(SMTP_SERVER, SMTP_TLS_PORT)
# server.starttls()
# server.login(SENDER, AUTH_CODE)
# server.sendmail(SENDER, [RECEIVER], msg.as_string())
# server.quit()
if __name__ == "__main__":
send_via_qq()
代码讲解
- QQ邮箱SMTP服务器固定为
smtp.qq.com,不用填别的。 - 465端口:直接SSL加密,代码用
SMTP_SSL;587端口:明文连接后再starttls()升级,代码用SMTP()+starttls()。 - 授权码怎么拿: 1. 电脑登录QQ邮箱网页版,点"设置"→"账号"。 2. 往下滑找到"POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务"。 3. 开启"SMTP服务",按提示用绑定手机发短信验证。 4. 验证成功后会给你一串16位授权码,复制出来填到代码里。
- 授权码可以在同一个页面"生成授权码"重置,丢了就重新生成一个。
运行结果
控制台打印"QQ邮箱邮件发送成功",收件人邮箱(含垃圾箱)收到一封来自你的QQ邮箱的邮件。
注意事项
- 密码错了会报535错误:99%的情况是把QQ密码当成授权码填了,重新去后台生成授权码。
- QQ邮箱每天免费发信上限约500封,群发超量会被临时封禁24小时。
- 发出去的邮件容易被对方判为垃圾邮件,建议在邮件正文里加退订说明、正文别全是链接。
- 公司网络可能封465端口,连不上时换587端口或手机热点。
- 授权码相当于你邮箱的后门,泄露后任何人都能以你名义发邮件,别硬编码到公开代码仓库里。

更新时间:2026-09-14 21:07:19
上一篇:Python读取未读邮件 imaplib UNSEEN搜索教程