Python邮件发送完全指南 - 从基础到高级应用
- Python
- 2025-08-10
- 871
Python实现邮件发送完全指南
为什么使用Python发送邮件?
Python提供了强大的标准库用于电子邮件发送,使开发者能够轻松实现自动化邮件通知、报告发送、用户注册验证等功能。本教程将带你全面掌握Python邮件发送技术。
主要应用场景: 系统监控报警、批量邮件营销、用户账户验证、自动化报告发送、事务性通知等。
核心Python库
smtplib
用于建立与SMTP服务器的连接并发送邮件。支持SMTP、SMTP_SSL和STARTTLS加密方式。
用于构建复杂的邮件消息,包括纯文本、HTML内容、附件以及多部分邮件结构。
准备工作
在发送邮件前,你需要:
- 拥有一个支持SMTP的邮箱账号(Gmail、QQ、163等)
- 获取SMTP服务器地址和端口号
- 生成邮箱的授权码(而非登录密码)
常用邮箱SMTP配置
邮箱服务 | SMTP服务器 | 端口 | 加密方式 |
---|---|---|---|
QQ邮箱 | smtp.qq.com | 465 | SSL |
163邮箱 | smtp.163.com | 465 | SSL |
Gmail | smtp.gmail.com | 587 | TLS |
发送纯文本邮件
这是最基本的邮件发送方式,适合发送简单的通知和消息。
示例代码:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 邮件配置
smtp_server = 'smtp.163.com'
smtp_port = 465
username = 'your_email@163.com'
password = 'your_authorization_code' # 授权码,不是登录密码
# 创建邮件内容
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_SSL(smtp_server, smtp_port)
server.login(username, password)
# 发送邮件
server.sendmail(username, ['recipient@example.com'], message.as_string())
print("邮件发送成功!")
# 关闭连接
server.quit()
except Exception as e:
print(f"邮件发送失败: {str(e)}")
发送HTML格式邮件
HTML邮件允许你创建更丰富的内容,包括格式、图片和链接,适合营销邮件和通知。
示例代码:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 邮件配置
smtp_server = 'smtp.qq.com'
smtp_port = 465
username = 'your_email@qq.com'
password = 'your_authorization_code' # QQ邮箱授权码
# 创建HTML邮件内容
html_content = """
<html>
<body>
<h1 style="color: #3498db;">欢迎加入我们的服务!</h1>
<p>感谢您注册我们的平台,以下是您的账户信息:</p>
<ul>
<li><strong>用户名:</strong> user123</li>
<li><strong>注册时间:</strong> 2023-06-15</li>
</ul>
<p><a href="https://example.com/activate" style="background: #3498db; color: white; padding: 10px 20px; text-decoration: none; border-radius: 4px;">激活账户</a></p>
<p style="color: #7f8c8d;">如果您未进行此操作,请忽略此邮件。</p>
</body>
</html>
"""
message = MIMEText(html_content, 'html', 'utf-8')
message['From'] = Header('系统通知 <no-reply@example.com>', 'utf-8')
message['To'] = Header('新用户', 'utf-8')
message['Subject'] = Header('账户注册成功通知', 'utf-8')
try:
server = smtplib.SMTP_SSL(smtp_server, smtp_port)
server.login(username, password)
server.sendmail(username, ['recipient@example.com'], message.as_string())
server.quit()
print("HTML邮件发送成功!")
except Exception as e:
print(f"邮件发送失败: {str(e)}")
发送带附件的邮件
通过Python可以轻松发送包含附件的邮件,适合发送报告、文档和图片。
示例代码:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.header import Header
import os
# 邮件配置
smtp_server = 'smtp.gmail.com'
smtp_port = 587
username = 'your_email@gmail.com'
password = 'your_app_password' # Gmail应用密码
# 创建多部分消息
message = MIMEMultipart()
message['From'] = Header('报告系统 <reports@example.com>', 'utf-8')
message['To'] = Header('经理', 'utf-8')
message['Subject'] = Header('月度销售报告', 'utf-8')
# 添加邮件正文
body = MIMEText('您好,请查收本月的销售报告。', 'plain', 'utf-8')
message.attach(body)
# 添加附件
file_path = 'monthly_report.pdf'
with open(file_path, 'rb') as f:
attachment = MIMEApplication(f.read(), Name=os.path.basename(file_path))
attachment['Content-Disposition'] = f'attachment; filename="{os.path.basename(file_path)}"'
message.attach(attachment)
try:
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # Gmail使用TLS加密
server.login(username, password)
server.sendmail(username, ['manager@example.com'], message.as_string())
server.quit()
print("带附件的邮件发送成功!")
except Exception as e:
print(f"邮件发送失败: {str(e)}")
邮件发送最佳实践
安全性
- 始终使用加密连接(SSL/TLS)
- 不要将密码硬编码在代码中
- 使用环境变量或配置文件存储敏感信息
错误处理
- 使用try-except捕获异常
- 添加重试机制
- 记录邮件发送日志
性能优化
- 重用SMTP连接发送多封邮件
- 批量发送时使用多线程
- 使用异步方式发送
总结
Python通过smtplib和email库提供了强大的邮件发送能力。无论是简单的文本通知,还是复杂的带附件HTML邮件,Python都能轻松应对。
在实际应用中,建议将邮件发送功能封装成独立模块或类,以便在整个项目中复用。
现在你已经掌握了Python邮件发送的核心技术,可以开始在你的项目中实现自动化邮件功能了!
本文由LianpoXianHua于2025-08-10发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://521pj.cn/20257821.html
发表评论