当前位置:首页 > Python > 正文

Python邮件自动化实战指南(手把手教你用Python email库发送邮件)

在日常开发或工作中,我们经常需要通过程序自动发送邮件,比如系统告警、用户注册验证、定时报表等。Python 提供了强大的内置库 emailsmtplib,可以轻松实现邮件的构建与发送。本文将从零开始,详细讲解如何使用 Python email库 发送各种类型的邮件,即使你是编程小白也能轻松上手!

一、准备工作:了解核心模块

要使用 Python 发送邮件,主要依赖两个标准库:

  • email:用于构建符合 RFC 标准的邮件内容(包括纯文本、HTML、附件等)。
  • smtplib:用于连接 SMTP 服务器并发送邮件。

这两个库都是 Python 自带的,无需额外安装。

Python邮件自动化实战指南(手把手教你用Python email库发送邮件) Python email库 发送邮件教程 SMTP 邮件自动化 第1张

二、发送最简单的纯文本邮件

我们先从最基础的纯文本邮件开始。以下是一个完整的示例:

import smtplibfrom email.mime.text import MIMETextfrom email.header import Header# 邮件内容msg = MIMEText('这是一封由Python自动发送的测试邮件!', 'plain', 'utf-8')msg['From'] = Header('发件人 <sender@example.com>', 'utf-8')msg['To'] = Header('收件人 <receiver@example.com>', 'utf-8')msg['Subject'] = Header('Python邮件测试', 'utf-8')# SMTP服务器配置(以QQ邮箱为例)smtp_server = 'smtp.qq.com'smtp_port = 587username = 'your_email@qq.com'password = 'your_authorization_code'  # 注意:不是邮箱密码,是授权码!# 发送邮件try:    server = smtplib.SMTP(smtp_server, smtp_port)    server.starttls()  # 启用安全传输    server.login(username, password)    server.sendmail(username, ['receiver@example.com'], msg.as_string())    server.quit()    print("邮件发送成功!")except Exception as e:    print(f"邮件发送失败: {e}")  

⚠️ 重要提示:大多数邮箱服务商(如 QQ、163、Gmail)出于安全考虑,不允许直接使用登录密码发送邮件,而是需要开启“SMTP服务”并使用授权码作为密码。请登录你的邮箱设置中获取。

三、发送HTML格式邮件

如果你想发送更美观的邮件(比如带颜色、链接、图片),可以使用 HTML 格式:

html_content = """<html>  <body>    <h2 style='color: blue;'>欢迎使用Python邮件自动化!</h2>    <p>这是由 <strong>Python email库</strong> 发送的HTML邮件。</p>    <a href='https://www.python.org'>点击访问Python官网</a>  </body></html>"""msg = MIMEText(html_content, 'html', 'utf-8')# 其余代码与纯文本邮件相同...  

四、添加附件

要发送带附件的邮件,需要用到 MIMEMultipart

from email.mime.multipart import MIMEMultipartfrom email.mime.base import MIMEBasefrom email import encoders# 创建多部分邮件msg = MIMEMultipart()msg['From'] = Header('发件人 <sender@example.com>', 'utf-8')msg['To'] = Header('收件人 <receiver@example.com>', 'utf-8')msg['Subject'] = Header('带附件的邮件', 'utf-8')# 添加正文msg.attach(MIMEText('请查收附件。', 'plain', 'utf-8'))# 添加附件with open('report.pdf', 'rb') as f:    part = MIMEBase('application', 'octet-stream')    part.set_payload(f.read())    encoders.encode_base64(part)    part.add_header(        'Content-Disposition',        f'attachment; filename=report.pdf'    )    msg.attach(part)# 使用smtplib发送(同前)  

五、常见问题与最佳实践

  • SMTP端口选择:通常使用 587(STARTTLS)或 465(SSL)。QQ 邮箱推荐 587,Gmail 推荐 587 或 465。
  • 授权码安全:不要将授权码写死在代码中,建议使用环境变量或配置文件管理。
  • 异常处理:务必使用 try-except 捕获网络或认证错误。
  • 批量发送:如需群发,可循环调用 sendmail,但注意不要触发反垃圾邮件机制。

六、总结

通过本文,你已经掌握了使用 Python email库 发送纯文本、HTML 邮件以及添加附件的基本方法。无论是用于 邮件自动化、系统监控还是业务通知,这套方案都非常实用。记住,关键在于正确配置 SMTP 服务器和使用授权码。

现在,你可以尝试修改上面的代码,给自己发送一封测试邮件!如果你正在学习 Python SMTP 相关技术,不妨将这段代码封装成一个函数,方便日后复用。

希望这篇 发送邮件教程 对你有所帮助!如有疑问,欢迎在评论区留言交流。