
# 如何用Python发送邮件通知
在日常工作或项目开发中,自动发送邮件通知是一项非常实用的功能。无论是监控系统告警、数据报表推送,还是用户注册确认,Python都能帮助我们高效完成这一任务。本文将介绍如何使用Python的`smtplib`和`email`库实现邮件发送,并附上完整示例。
## 一、准备工作
在开始编码前,需要确认以下两点:
1. **Python环境**:确保已安装Python 3.x,无需额外安装第三方库(`smtplib`和`email`均为内置模块)。
2. **邮箱账户**:准备一个用于发送邮件的邮箱(如QQ邮箱、163邮箱或Gmail),并获取授权码(非登录密码)。以QQ邮箱为例:
- 登录QQ邮箱,点击“设置” → “账户” → 开启“POP3/SMTP服务”。
- 生成授权码并妥善保存。
## 二、核心代码实现
以下是一个发送纯文本邮件的完整示例:
```python
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 配置邮箱信息
mail_host = "smtp.qq.com" # 邮件服务器地址
mail_user = "your_email@qq.com" # 发件人邮箱
mail_pass = "your_authorization_code" # 授权码(非密码)
sender = "your_email@qq.com"
receivers = ["receiver1@example.com", "receiver2@example.com"] # 收件人列表
# 构建邮件内容
message = MIMEText("这是一封Python自动发送的测试邮件。", "plain", "utf-8")
message["From"] = Header("Python通知机器人", "utf-8") # 发件人昵称
message["To"] = Header("管理员", "utf-8") # 收件人昵称
message["Subject"] = Header("系统通知:任务完成", "utf-8") # 邮件主题
# 发送邮件
try:
smtp_obj = smtplib.SMTP_SSL(mail_host, 465) # 使用SSL加密连接
smtp_obj.login(mail_user, mail_pass)
smtp_obj.sendmail(sender, receivers, message.as_string())
print("邮件发送成功!")
except smtplib.SMTPException as e:
print(f"发送失败:{e}")
finally:
smtp_obj.quit()
```
## 三、进阶功能:发送HTML与附件
### 1. 发送HTML格式邮件
只需将`MIMEText`的第二个参数改为`"html"`,即可嵌入表格、图片或超链接:
```python
html_content = """
数据日报
今日访问量:10,234
"""
message = MIMEText(html_content, "html", "utf-8")
```
### 2. 发送带附件的邮件
使用`MIMEMultipart`构建复合邮件:
```python
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
msg = MIMEMultipart()
msg["From"] = sender
msg["To"] = ",".join(receivers)
msg["Subject"] = "带附件的报告"
# 添加附件
with open("report.pdf", "rb") as f:
attachment = MIMEBase("application", "octet-stream")
attachment.set_payload(f.read())
encoders.encode_base64(attachment)
attachment.add_header("Content-Disposition", "attachment", filename="report.pdf")
msg.attach(attachment)
# 发送逻辑同上
```
## 四、常见问题与注意事项
- **端口选择**:SSL加密通常使用465端口,TLS加密使用587端口。若使用Gmail,需注意安全设置。
- **授权码安全**:切勿将授权码硬编码在公开代码中,建议使用环境变量或配置文件管理。
- **频率限制**:部分邮箱对单日发送量有限制(如QQ邮箱每日约500封),避免频繁发送导致封禁。
- **错误处理**:务必捕获`smtplib.SMTPException`异常,并记录日志以便排查。
## 五、实际应用场景
- **自动化运维**:服务器磁盘空间不足或CPU过载时,自动发送告警邮件。
- **数据报表**:每日定时生成销售数据报表,并通过邮件推送给管理层。
- **用户交互**:用户注册后发送验证邮件,或密码重置链接。
## 结语
通过Python发送邮件通知不仅简单高效,还能大幅提升工作效率。结合定时任务(如`schedule`库或系统cron),你可以轻松构建一套自动化的通知系统。希望本文能帮助你快速上手,让代码主动“说话”,为你的项目增添更多智能化色彩。
本文链接:https://www.j520m.site/?id=356
--EOF--
发表于 2026-05-11 。
Comments