自动化邮件发送的终极秘籍:Python库smtplib与email的完整玩法

还记得第一次写邮件是什么时候吗? 也许是小时候用QQ邮箱给同学写过一封"秘密小纸条",也许是刚参加工作时,用Outlook给领导发了一份认真的周报。

无论是哪一种场景,邮件在我们生活和工作中都不可或缺。但你有没有想过,有一天,你可以不用手点开邮箱,一封一封地写,而是用几行Python代码,就能自动完成?

是的,这就是我要分享的主题:用Python自动化发送邮件 。 而实现这一切的关键,就是两个Python的内置库:smtplibemail

今天,我们就从零开始,把它们拆开来讲,带你走一遍"从入门到进阶"的完整流程。不管你是编程小白,还是已经在写脚本的开发者,这篇文章都会让你收获满满。


一、为什么要学会用Python发邮件?

先聊聊场景。 想象一下这些情况:

  • 你是一个数据分析师,每天需要把当天的分析报表发给老板。手动发很麻烦,忘记一次还可能挨批评。
  • 你是一个开发者,系统运行出错时需要自动通知相关人员。如果能让程序自己发邮件提醒,是不是省心又高效?
  • 你是一个交易爱好者,想每天收盘后收到一封"今日行情总结"的自动推送。

这些事情,完全可以交给Python来搞定。 说白了,Python的邮件自动化 = 省时、省力、省心

而且最重要的是,这项技能你一旦掌握,就能用在无数场景中。


二、认识主角:smtplib 和 email

我们先别急着上手敲代码,先搞明白两个主角分别干啥。

  • smtplib:它就像是一个邮递员,负责把你写好的信(邮件)送到对方邮箱。SMTP 的全称是"简单邮件传输协议",几乎所有的邮件都是通过它来投递的。
  • email:它是一个写信工具,帮你把邮件的内容组装好。不管是纯文本、HTML,还是附件,都可以用它来构造。

一个管送,一个管写。它俩搭配起来,就能把整个流程打通。


三、准备工作:邮箱设置

要让Python帮你发邮件,第一步不是写代码,而是要让你的邮箱"开门迎客"。

大部分邮箱默认是不允许外部程序直接登录的,你需要先开启 SMTP 服务。 以126邮箱为例,操作步骤大概是这样:

  1. 登录邮箱 → 找到 设置 → 找到 SMTP/POP3服务
  2. 点击开启SMTP服务(有些平台会要求你手机验证码验证)。
  3. 验证完成后,系统会给你一个 授权码。注意,这个授权码非常重要,它相当于是你用程序登录邮箱的密码,一定要妥善保存。
  4. 记下邮箱的 SMTP服务器地址 。比如126邮箱的是 smtp.126.com,QQ邮箱的是 smtp.qq.com

完成这一步,你的邮箱就算"开锁"了,可以用来写代码了。


四、第一封自动化邮件:从零到一

下面我们写一段最简单的代码:

python 复制代码
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# 设置邮件内容
msg = MIMEMultipart()
msg['From'] = '你的邮箱@126.com'  # 发件人邮箱
msg['To'] = '收件人的邮箱@qq.com'  # 收件人邮箱
msg['Subject'] = 'Python邮件测试'  # 邮件标题

# 邮件正文
body = '你好!这是一封通过Python发送的邮件。'
msg.attach(MIMEText(body, 'plain'))  # 将正文内容添加到邮件中

# 设置SMTP服务器并发送邮件
try:
    # 连接SMTP服务器,指定服务器地址和端口
    server = smtplib.SMTP('smtp.126.com')  # 根据邮箱提供商修改SMTP地址
    server.starttls()  # 启用TLS加密
    server.login('你的邮箱@126.com', '邮箱密码或者授权登录码')  # 登录邮箱
    text = msg.as_string()  # 将MIME消息转换为字符串
    server.sendmail(msg['From'], msg['To'], text)  # 发送邮件
    print('邮件发送成功!')
except Exception as e:
    print(f'邮件发送失败: {e}')
finally:
    server.quit()  # 退出SMTP服务器

运行之后,如果设置没问题,你会在收件人的邮箱里看到一封"Python邮件测试"。 那一刻,成就感满满。🎉


五、进阶玩法:不止是纯文本

如果只会发纯文本邮件,未免有点太单调了。邮件其实还可以很"花哨":

1. 发送HTML格式的邮件

比如你想发一封带有排版、颜色甚至图片的邮件,可以这样写:

css 复制代码
html_content = """
<html>
  <body>
    <h1 style="color: blue;">你好!这是通过Python发送的HTML邮件!</h1>
    <p>这封邮件展示了如何发送HTML格式的邮件内容。</p>
  </body>
</html>
"""
msg.attach(MIMEText(html_content, 'html'))  # 将HTML内容添加到邮件正文

收件人打开之后,会看到蓝色的标题和排版整齐的正文,比纯文本好多了。


2. 给邮件加上附件

再进一步,如果你需要把报表、图片、文档发给别人,可以添加附件:

python 复制代码
from email.mime.base import MIMEBase
from email import encoders

# 附件路径
filename = "example.txt"

# 打开文件并添加到邮件
with open(filename, "rb") as attachment:
    part = MIMEBase('application', 'octet-stream')
    part.set_payload(attachment.read())  # 读取文件内容
    encoders.encode_base64(part)  # 对附件进行Base64编码
    part.add_header('Content-Disposition', f'attachment; filename="{filename}"')  # 设置附件名称
    msg.attach(part)  # 将附件添加到邮件

运行后,收件人就能在邮件里下载 example.txt 这个附件。是不是很实用?


六、常见的坑与解决办法

写到这里,你可能跃跃欲试,但在实际使用中,大家经常会遇到一些小坑:

  1. 登录失败 明明账号密码没错,却提示"用户名或密码错误"。 👉 这通常是因为你没用授权码,而是直接用邮箱密码。记住:程序登录必须用授权码!

  2. 554 5.7.1 错误 这是邮件服务商把你的邮件认定为垃圾邮件。 👉 解决方法:

    • 邮件标题和正文写得正常一点,避免"中奖、优惠、秒杀"之类的敏感词。
    • 不要一次性群发太多邮件。
  3. 端口问题

    • 使用TLS加密一般是 587 端口;
    • 使用SSL加密一般是 465 端口。 如果收不到邮件,试试换端口。

七、实战场景:把邮件融入到你的工作流

学了这些基础之后,真正的价值在于把它应用到实战场景中。比如:

  • 定时日报 配合 schedulecron 定时任务,每天自动生成报表并发给团队。
  • 监控告警 系统出错、服务器宕机时,自动发邮件通知相关人员。
  • 个人效率工具 写个脚本,把待办事项、日程提醒发到自己邮箱里。

想象一下,当你睡觉的时候,Python帮你发完了所有的日报和提醒,是不是一种"解放双手"的快感?


八、总结

今天我们从最基础的概念讲起,一步步演示了如何用Python的 smtplibemail 库发送邮件。 内容涵盖:

  • 如何开启邮箱的SMTP服务并获取授权码;
  • 发送第一封纯文本邮件;
  • 扩展玩法:HTML邮件、带附件的邮件;
  • 常见问题与解决方案;
  • 实战场景应用。

你会发现,这项技能其实并不复杂,但实用性极强。 当别人还在手动一封封发邮件时,你的Python脚本已经帮你自动搞定,这就是所谓的"用技术偷懒"。

如果你正打算提升工作效率,或者给项目加点"智能感",试试用Python发一封属于自己的自动化邮件吧。 也许,就从今天开始,你会对"发邮件"这件小事,重新产生敬畏和喜爱。

相关推荐
我是ed2 小时前
# vue3 实现甘特图
前端
扯淡的闲人2 小时前
多语言编码Agent解决方案(2)-后端服务实现
开发语言·python·深度学习
蒋星熠2 小时前
深度学习实战指南:从神经网络基础到模型优化的完整攻略
人工智能·python·深度学习·神经网络·机器学习·卷积神经网络·transformer
m0_616188492 小时前
el-table的隔行变色不影响row-class-name的背景色
前端·javascript·vue.js
zheshiyangyang2 小时前
Vue3组件数据双向绑定
前端·javascript·vue.js
万粉变现经纪人3 小时前
如何解决pip安装报错ModuleNotFoundError: No module named ‘cuml’问题
python·scrapy·beautifulsoup·pandas·ai编程·pip·scipy
IT学长编程3 小时前
计算机毕业设计 基于Hadoop豆瓣电影数据可视化分析设计与实现 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试
大数据·hadoop·python·django·毕业设计·毕业论文·豆瓣电影数据可视化分析
xw53 小时前
uni-app项目支付宝端Input不受控
前端·uni-app·支付宝
java1234_小锋3 小时前
Scikit-learn Python机器学习 - 分类算法 - K-近邻(KNN)算法
python·算法·机器学习