Python自动发送邮件 smtplib基础教程
用Python内置smtplib和email库从零发送第一封纯文本邮件,涵盖SMTP连接、登录、构造Message、发送全过程,附完整可运行代码与常见报错排查。
场景痛点
每天定时给领导发日报、给客户发通知,手工登录网页邮箱逐个填写又慢又容易漏人。用Python的smtplib几行代码就能把邮件发出去,配合脚本和定时任务,每天到点自动发,不用再惦记。
用到的库
smtplib和email都是Python标准库,无需pip安装。
# 无需安装,Python3自带
# python -m pip --version # 确认环境即可
完整代码
# -*- coding: utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 邮件账号配置(请替换为你自己的)
SMTP_SERVER = "smtp.qq.com" # SMTP服务器地址
SMTP_PORT = 465 # SSL端口
SENDER = "your_account@qq.com" # 发件人邮箱
AUTH_CODE = "your_smtp_auth_code" # 授权码(不是登录密码)
RECEIVER = "receiver@example.com" # 收件人
def send_text_email():
# 1. 构造纯文本邮件内容
body = "你好,\n\n这是一封由Python smtplib自动发送的测试邮件。\n祝工作顺利!"
msg = MIMEText(body, "plain", "utf-8")
# 2. 设置邮件头
msg["From"] = Header(f"我的邮箱 <{SENDER}>", "utf-8")
msg["To"] = Header(RECEIVER, "utf-8")
msg["Subject"] = Header("Python自动发送测试邮件", "utf-8")
# 3. 连接SMTP服务器并登录
# 465端口走SSL,直接用SMTP_SSL
server = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)
server.login(SENDER, AUTH_CODE)
# 4. 发送邮件:as_string()把Message对象转成字符串
server.sendmail(SENDER, [RECEIVER], msg.as_string())
server.quit()
print("邮件发送成功")
if __name__ == "__main__":
send_text_email()
代码讲解
MIMEText(body, "plain", "utf-8"):构造纯文本邮件,第二参数plain表示纯文本,第三参数指定编码为utf-8,避免中文乱码。Header(..., "utf-8"):对发件人、收件人、主题做头部编码,否则中文主题会乱码。smtplib.SMTP_SSL(server, port):用SSL加密连接,465端口必须走这个;如果用587端口,则要先SMTP()再调用starttls()。server.sendmail(发件人, [收件人列表], 字符串内容):注意收件人是列表,即使一个人也要放列表里;第三个参数必须是字符串,所以用msg.as_string()。
运行结果
运行后控制台打印邮件发送成功,去收件人邮箱(包括垃圾箱)能看到标题为"Python自动发送测试邮件"的邮件。
注意事项
- QQ邮箱用
smtp.qq.com,163邮箱用smtp.163.com,企业邮箱按服务商给的地址填。 - 密码处填的是SMTP授权码,不是网页登录密码,需要在邮箱设置里手动开启SMTP并生成授权码。
- 公司网络有时会封25/465/587端口,连不上时换手机热点测试。
- 465用
SMTP_SSL,587用SMTP+starttls(),别混用。

更新时间:2026-09-14 21:05:19