上一篇
Python Email模块使用教程 - 从入门到精通 | Python邮件发送指南
- Python
- 2025-07-15
- 180
Python Email模块使用教程
本教程将全面介绍Python标准库中的email模块,教你如何发送各种类型的电子邮件:
- 纯文本邮件
- HTML格式邮件
- 带附件的邮件
- 包含图片的HTML邮件
一、Python邮件发送基础
Python的email
模块与smtplib
模块配合使用可以实现邮件发送功能。
基本发送流程:
- 创建SMTP连接
- 构建邮件内容
- 设置发件人、收件人和主题
- 发送邮件
- 关闭连接
二、发送纯文本邮件
最简单的邮件类型是纯文本邮件:
示例代码:发送文本邮件
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 邮件配置
smtp_server = 'smtp.example.com' # SMTP服务器地址
smtp_port = 587 # 端口号(TLS)
sender = 'your_email@example.com' # 发件人邮箱
password = 'your_password' # 邮箱密码/授权码
receiver = 'recipient@example.com' # 收件人邮箱
# 创建纯文本邮件内容
message = MIMEText('这是一封使用Python发送的测试邮件', 'plain', 'utf-8')
message['From'] = Header('Python发件人', 'utf-8') # 发件人名称
message['To'] = Header('收件人', 'utf-8') # 收件人名称
message['Subject'] = Header('Python邮件测试', 'utf-8') # 邮件主题
try:
# 创建SMTP连接
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # 启用TLS加密
server.login(sender, password)
# 发送邮件
server.sendmail(sender, [receiver], message.as_string())
print("邮件发送成功!")
except Exception as e:
print(f"邮件发送失败: {e}")
finally:
server.quit() # 关闭连接
三、发送HTML格式邮件
发送HTML邮件可以创建更丰富的邮件内容:
示例代码:发送HTML邮件
import smtplib
from email.mime.text import MIMEText
# 创建HTML邮件内容
html_content = """
<html>
<body>
<h1 style="color: #3498db;">HTML邮件测试</h1>
<p>这是一封使用<strong>Python</strong>发送的HTML格式邮件</p>
<ul>
<li>列表项 1</li>
<li>列表项 2</li>
<li>列表项 3</li>
</ul>
<p><a href="https://www.python.org">访问Python官网</a></p>
</body>
</html>
"""
message = MIMEText(html_content, 'html', 'utf-8')
message['From'] = sender
message['To'] = receiver
message['Subject'] = 'HTML邮件测试'
# 发送邮件代码同上(省略SMTP连接部分)
四、发送带附件的邮件
使用MIMEMultipart和MIMEBase发送带附件的邮件:
示例代码:发送带附件的邮件
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email import encoders
import os
# 创建多部分消息容器
message = MIMEMultipart()
message['From'] = sender
message['To'] = receiver
message['Subject'] = '带附件的测试邮件'
# 添加邮件正文
body = "这是一封包含附件的测试邮件,请查收附件。"
message.attach(MIMEText(body, 'plain'))
# 添加附件
filename = 'example.pdf' # 附件文件名
filepath = os.path.join(os.getcwd(), filename)
# 读取附件内容
with open(filepath, 'rb') as attachment:
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
# 对附件进行Base64编码
encoders.encode_base64(part)
# 设置附件头信息
part.add_header(
'Content-Disposition',
f'attachment; filename= {filename}',
)
# 将附件添加到消息容器
message.attach(part)
# 发送邮件代码同上(省略SMTP连接部分)
五、发送包含图片的HTML邮件
在HTML邮件中嵌入图片需要使用CID引用:
示例代码:发送带图片的HTML邮件
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
# 创建多部分消息容器
message = MIMEMultipart('related')
message['From'] = sender
message['To'] = receiver
message['Subject'] = '包含图片的HTML邮件'
# 创建HTML正文
html_content = """
<html>
<body>
<h1>包含图片的邮件</h1>
<p>这是一封包含嵌入式图片的邮件:</p>
<img src="cid:image1" alt="示例图片" style="max-width: 400px;">
<p>邮件结束</p>
</body>
</html>
"""
# 添加HTML部分
html_part = MIMEText(html_content, 'html')
message.attach(html_part)
# 添加图片
image_path = 'example.jpg'
with open(image_path, 'rb') as img_file:
img = MIMEImage(img_file.read())
img.add_header('Content-ID', '<image1>') # 这里的ID需要和HTML中的cid对应
message.attach(img)
# 发送邮件代码同上(省略SMTP连接部分)
六、邮件发送最佳实践
1. 安全性注意事项
- 始终使用TLS/SSL加密连接
- 不要在代码中硬编码密码,使用环境变量或配置文件
- 使用授权码而非邮箱密码(Gmail、QQ邮箱等)
2. 邮件发送优化
- 添加邮件退订链接(符合反垃圾邮件规范)
- 提供纯文本替代内容(对于HTML邮件)
- 测试不同邮件客户端的兼容性
3. 常见问题解决
- 认证错误:检查用户名/密码,确保启用SMTP服务
- 连接超时:检查防火墙设置和端口可用性
- 被识别为垃圾邮件:配置SPF、DKIM和DMARC记录
七、总结
Python的email模块提供了强大而灵活的邮件处理能力。通过本教程,您已经学会了:
- 发送纯文本和HTML格式邮件
- 添加附件到邮件
- 在HTML邮件中嵌入图片
- 邮件发送的安全注意事项
在实际应用中,您还可以结合email模块与其他库实现更高级的功能:
- 使用email.parser解析收到的邮件
- 使用email.policy定制邮件处理策略
- 使用email.header.decode_header处理编码问题
通过掌握Python email模块,您可以轻松实现自动化邮件发送功能,提升工作效率。
本文由XuGong于2025-07-15发表在吾爱品聚,如有疑问,请联系我们。
本文链接:http://pjw.521pj.cn/20255647.html
发表评论