我的知识记录

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(),别混用。

Python自动发送邮件 smtplib基础教程

标签:

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

上一篇:Python批量读取多个JSON汇总教程

下一篇:Python发送邮件多个附件 一次打包发送