flask-mail发送邮件范例
时间: 2025-08-10 17:58:15 AIGC 浏览: 17
<think>我们使用Flask-Mail扩展来发送电子邮件。首先,确保已经安装了Flask-Mail。
安装命令:pip install Flask-Mail
以下是一个使用Flask-Mail发送邮件的简单示例。我们将创建一个Flask应用,并配置邮件服务器,然后发送一封测试邮件。
步骤:
1. 导入必要的模块。
2. 创建Flask应用实例。
3. 配置邮件服务器(如:MAIL_SERVER, MAIL_PORT, MAIL_USE_TLS, MAIL_USERNAME, MAIL_PASSWORD等)。
4. 初始化Mail对象。
5. 定义路由和视图函数,在视图函数中发送邮件。
注意:在实际使用中,请将邮箱的用户名和密码等敏感信息保存在环境变量中,不要直接写在代码里。
示例代码:</think>以下是使用 Flask-Mail 发送邮件的详细实现方案。Flask-Mail 是 Flask 的扩展库,简化了在 Flask 应用中发送邮件的流程。
### 解决方案步骤
1. **安装依赖**
2. **配置 Flask 应用**
3. **创建邮件发送函数**
4. **编写路由触发邮件发送**
#### 完整代码示例
```python
# 安装必要库 (提前执行)
# pip install Flask Flask-Mail
from flask import Flask
from flask_mail import Mail, Message
app = Flask(__name__)
# 配置邮件服务器参数 (以QQ邮箱为例)
app.config['MAIL_SERVER'] = 'smtp.qq.com' # 邮件服务器地址
app.config['MAIL_PORT'] = 465 # SSL端口
app.config['MAIL_USE_SSL'] = True # 启用SSL加密
app.config['MAIL_USERNAME'] = '[email protected]' # 发件邮箱
app.config['MAIL_PASSWORD'] = 'your_authorization_code' # 邮箱授权码(非登录密码)
app.config['MAIL_DEFAULT_SENDER'] = '[email protected]' # 默认发件人
# 初始化Mail扩展
mail = Mail(app)
# 邮件发送函数
def send_email(subject, recipients, body):
msg = Message(
subject=subject, # 邮件主题
recipients=recipients, # 收件人列表
body=body # 邮件正文
)
mail.send(msg)
return "邮件发送成功!"
# 测试路由
@app.route('/send')
def trigger_email():
return send_email(
subject="Flask-Mail测试邮件",
recipients=["[email protected]"], # 替换为实际收件邮箱
body="这是一封来自Flask-Mail的测试邮件!"
)
if __name__ == '__main__':
app.run(debug=True)
```
### 关键代码解释
1. **配置参数说明**
- `MAIL_SERVER`: SMTP 服务器地址(QQ邮箱: `smtp.qq.com`,Gmail: `smtp.gmail.com`)
- `MAIL_PORT`: 加密端口(SSL 一般为 465,TLS 为 587)
- `MAIL_USE_SSL`: 启用 SSL 加密(更安全)
- `MAIL_USERNAME`: 发件邮箱地址
- `MAIL_PASSWORD`: **邮箱授权码**(需在邮箱设置中生成,不是登录密码)
- `MAIL_DEFAULT_SENDER`: 默认发件人(可选)
2. **核心组件**
- `Mail()`: 将 Flask 应用与邮件服务绑定
- `Message()`: 创建邮件对象
- `subject`: 邮件标题
- `recipients`: 收件人列表(支持多个)
- `body`: 纯文本邮件内容
- 也可用 `html` 参数发送 HTML 邮件
3. **发送流程**
```python
msg = Message("标题", recipients=["收件人"])
msg.body = "文本内容"
mail.send(msg) # 异步发送
```
### 邮箱配置注意事项
1. **获取授权码**
- QQ邮箱:设置 → 账户 → 开启 POP3/SMTP → 生成授权码
- Gmail:Google 账户 → 安全性 → 应用专用密码
2. **安全建议**
- 不要硬编码密码,使用环境变量:
```python
import os
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')
```
3. **常见错误**
- 端口错误:SSL 必须用 465 端口
- 未启用加密:`MAIL_USE_SSL` 或 `MAIL_USE_TLS` 需至少启用一个
- 授权码错误:确认使用授权码而非邮箱密码
### 进阶用法
发送 HTML 邮件:
```python
msg = Message("HTML邮件", recipients=["[email protected]"])
msg.html = "<h1>标题</h1><p>带样式的正文</p>"
mail.send(msg)
```
添加附件:
```python
with app.open_resource("report.pdf") as fp:
msg.attach("report.pdf", "application/pdf", fp.read())
```
### 调试技巧
1. 启用测试模式(不实际发送):
```python
app.config['MAIL_SUPPRESS_SEND'] = True # 开发环境使用
```
2. 查看邮件内容:
```python
with mail.record_messages() as outbox:
send_test_email()
assert len(outbox) == 1
print(outbox[0].body)
```
阅读全文
相关推荐


















