[flask] flask-mail邮件发送

要让个人邮箱可以利用邮箱服务器发送邮件,需要打开服务并获取专属授权码。(在邮箱设置的账号设置里面)
在这里插入图片描述
在app文件中初始化之前必须要进行配置,设置个人邮箱信息

MAIL_SERVER 电子邮件服务器的名称/IP地址
MAIL_PORT 使用的服务器的端口号
MAIL_USE_TSL 启用/禁用传输安全层加密
MAIL_USE_SSL 启用/禁用安全套接字层加密
MAIL_DEBUG 调用支持。默认值是Flask应用程序的调试状态
MAIL_USERNAME 发件人的用户名
MAIL_PASSWORD 发件人的密码
MAIL_DEFAULT_SENDER 设置默认发件人
MAIL_MAX_EMAILS 设置要发送的最大邮件数
MAIL_SUPPRESS_SEND 如果app.testing 设置为true,则发送被抑制
MAIL_ASCII_ATTACHMENTS 如果设置为true,则附加的文件名将转换为ASCII

引入flask-mail 库包,创建邮箱对象

#在模块化py文件中写法
#exts文件
from flask_mail import Mail
mail = Mail()
#app文件
from exts import mail
app.config.from_object(config)
mail.init_app(app)  #初始化mail对象,在这之前必须要绑定配置信息

发送消息

from flask_mail import Message #消息对象
message = Message(subject="邮箱测试",recipients = ["202020502014@mails.zstu.edu.cn"],body="邮箱测试主题内容"); 
mail.send(message);

消息对象可以设置的参数:

  • subject 主题
  • recipients 收件人
  • sender 发件人
  • body 消息内容
  • html 发送内容,html形式
  • attachments 附件
    在这里插入图片描述

整理代码
直接在app.py中所使用

from flask_mail import Mail,Message

#配置信息
MAIL_SERVER = "smtp.qq.com"
MAIL_USE_SSL = True
MAIL_PORT = 465
MAIL_USERNAME =****@qq.com”    #自己的邮箱
MAIL_DEFAULT_SENDER =*****@qq.com”     #自己的邮箱
MAIL_PASSWORD =*****#授权码

#初始化Mail类
mail = Mail(app)

#使用mail发送消息
@auth.route("/mail/test")
def mail_test():
    # Message 参数 第一个参数是subject:主题,
    # recipients 收件人
    # sender送件人列表,
    # body 是 设置文本, html是写入html文本
    # attachments 附件
    message = Message(subject="邮箱测试",recipients = [****"],body="邮箱测试主题内容");
    mail.send(message);
    return "邮件发送测试"

分模块的我就不展示了

<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) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值