如何使用flask-mail发送邮件

发送邮件在网站开发中随处可见,其重要性不言而喻!!下面阿汤哥就为大家讲讲如何使用flask-mail发送邮件?
  
在讲之前,请确保已安装flask-mail包(更多关于flask-mail知识请访问http://www.pythondoc.com/flask-mail/index.html),安装方式如下:

pip install flask-mail

这里我以QQ邮箱为例,来讲解QQ邮箱的发送!其它邮箱与此类似(下图是QQ邮箱服务器地址、端口号相关信息)

exts.py 代码如下:

from flask_mail import Mail

mail = Mail()

config.py 代码如下:

# 服务器ip地址
MAIL_SERVER = "smtp.qq.com"

# 端口号:TLS对应587,SSL对应465
MAIL_PORT = "587"
MAIL_USE_TLS = True
# MAIL_USE_SSL : 默认为 False
# 发送者邮箱
MAIL_USERNAME = "你的qq邮箱"
# 发送者QQ邮箱授权码(进入邮箱发送短信申请即可,具体参照下图)
MAIL_PASSWORD = "此处为你的QQ邮箱授权码"
# 默认发送者
MAIL_DEFAULT_SENDER = "你的qq邮箱"

ptoject.py 代码如下:

from flask import Flask
import config
from exts import mail
from flask_mail import Message

app = Flask(__name__)
app.config.from_object(config)
mail.init_app(app)

@app.route('/')
def hello_world():
    return 'Hello World!'

@app.route("/send/")
def send():
    # 第一个参数为发送邮件的标题;
    # recipients:接收邮件的用户邮箱;
    # body:发送邮箱的主题内容
    msg = Message("测试邮件发送", recipients=['接收邮件的用户邮箱'], body="恭喜你,邮件发送成功!")
    mail.send(msg)
    return "success"

if __name__ == '__main__':
    app.run(debug=True)

运行project.py文件,如果不出意外的话,在浏览器输入127.0.0.1:5000/send。你就能收到邮件了。结果如下:

什么??你不信!!!不信你就按上面方法试试。

<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) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值