flask-mail常见的邮箱配置问题解决

本文详细介绍了使用Flask-Mail配置QQ邮箱和126邮箱的步骤,包括开启SMTP服务和获取授权码。同时,针对环境变量导入的不便,提出了创建info.py文件存储敏感信息的优化方案,以避免每次测试时重复导入。还分析了flask-mail测试中可能出现的连接和编码问题,提供了错误排查和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  这是我的第一篇技术博客,写的不好,大家多包涵,写这篇博客的主要就是总结下python的轻框架flask下的flask-mail的配置问题:

一、常见的邮箱的配置(包括QQ邮箱,126邮箱)

1、 根据《Flask Web开发》这本书中第6章关于flask-mail的配置,以下步骤(QQ邮箱配置为例,以下终端的演示均为在mac上进行,linux和win会略有所不同):

  • 安装flask-mail
(venv) $ pip install flask-mail
  • hello.py中的配置(以qq邮箱为例):
import os
# ...
app.config['MAIL_SERVER'] = 'smtp.qq.com'   
app.config['MAIL_PORT'] = 25
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME') 
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')
app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]'
app.config['FLASKY_MAIL_SENDER'] = 'Flasky Admin <1906242834@qq.com>'
app.config['FLASKY_ADMIN'] = os.environ.get('FLASKY_ADMIN')

其中用户的邮箱名、密码、以及管理员的邮箱是通过环境变量导入的,以下为终端中的操作:

(venv) $ export MAIL_PASSWORD='xxxxx'  #自己的邮箱客户端登录密码(不同于电脑登录的密码)
(venv) $ echo $MAIL_PASSWORD # 打印密码确定导入的密码是否正确         
xxxxx
(venv) $ export MAIL_USERNAME='2450385291@qq.com' # 自己的邮箱地址
(venv) 
<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-MailFlask 的扩展库,简化了在 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'] = 'your_email@qq.com' # 发件邮箱 app.config['MAIL_PASSWORD'] = 'your_authorization_code' # 邮箱授权码(非登录密码) app.config['MAIL_DEFAULT_SENDER'] = 'your_email@qq.com' # 默认发件人 # 初始化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=["target_email@example.com"], # 替换为实际收件邮箱 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=["user@example.com"]) 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) ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值