You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用create_app初始化Flask应用时Flask-Mail无法发邮件的解决方法

解决Flask工厂模式下邮件发送失败的问题

问题出在两个核心点:

  1. __init__.py里定义了全局的mail实例,但没在create_app()函数中完成它与Flask应用的绑定
  2. app.py里重复创建了mail实例,导致这个新实例无法读取到create_app()里配置的邮件参数

第一步:修改__init__.py

在create_app()函数中,找到db.init_app(app)这一行,在它后面添加mail.init_app(app),让全局的mail实例和当前创建的Flask应用完成绑定:

def create_app():
    app = Flask(__name__)
    # ... 其他原有配置代码保持不变 ...
    db.init_app(app)
    # 添加这行代码,绑定mail实例与应用
    mail.init_app(app)
    
    # ... 后续蓝图注册、数据库创建等代码保持不变 ...

第二步:修改app.py

删掉自己创建的mail = Mail(app),改成从website包导入已经初始化好的mail实例:

from website import create_app, mail  # 从包中导入全局mail实例
from flask import Flask, request, render_template
from flask_mail import Message  # 无需再导入Mail类

app = create_app()

# 删掉这一行:mail = Mail(app)

def send_email_notification(email, body):
    msg = Message('Scheduled Notification', sender='your_email@gmail.com', recipients=['myemail'])
    msg.body = body
    mail.send(msg)

# ... 后续路由代码保持不变 ...

最后检查配置

确保__init__.py里的MAIL_USERNAME和MAIL_PASSWORD已填写正确内容(如果使用Gmail,开启两步验证后需要用应用专用密码,而非普通登录密码)。

现在启动应用,点击按钮提交表单,就能正常发送邮件了。

内容的提问来源于stack exchange,提问作者Snatking09

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 02:55:08