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

Flask-Mail发送Gmail邮件时mail.send()卡住无响应问题排查

Flask集成flask_mail调用Gmail发信时send方法阻塞无报错问题

问题表现

集成flask_mail实现邮件发送功能时,表单校验、消息对象创建、正文赋值步骤均可正常执行并打印对应日志,执行到mail.send(msg)语句时程序直接挂起,无任何错误抛出,请求无法返回,页面永久处于加载状态。
控制台最终输出如下:

Form received
msg created
Body created

后续无任何日志输出,请求持续阻塞。

关联代码

路由代码片段(Blueprint)

...
from flask_mail import Message
from app import mail
from os import environ
...

@index_bp.route('/contact', methods=['POST'])
def contact():
    form = ContactForm()
    
    if form.validate_on_submit():
        print('Form received')
        msg = Message('Test', recipients=environ.get('TARGET_MAIL'))
        print('msg created')
        msg.body = 'Test mail'
        print('Body created')
        mail.send(msg)
        print('Mail sent')

    
    return redirect(url_for('.index'))

服务配置

class Config:
    STATIC_FOLDER = 'static'
    TEMPLATES_FOLDER = 'templates'
    SECRET_KEY = environ.get('SECRET_KEY')
    MAIL_SERVER = 'smtp.google.com'
    MAIL_PORT = 465
    MAIL_USERNAME = environ.get('MAIL_USERNAME')
    MAIL_PASSWORD = environ.get('MAIL_PASSWORD')
    MAIL_USE_TLS = False
    MAIL_USE_SSL = True
    MAIL_DEFAULT_SENDER = environ.get('MAIL_USERNAME')

应用初始化代码

from flask import Flask
from flask_mail import Mail

mail = Mail()
def init_app():
    app = Flask(__name__)
    app.config.from_object('config.Config')
    mail.init_app(app)
    
    with app.app_context():
        from .index import routes
        app.register_blueprint(routes.index_bp)
        return app

复现验证

编写最小可运行测试用例,剥离业务逻辑单独验证flask_mail对接Gmail的发信能力,相同阻塞问题稳定复现:

from flask import Flask
from flask_mail import Mail, Message

app = Flask(__name__)

app.config['MAIL_SERVER']='smtp.google.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USERNAME'] = '<new gmail account>@gmail.com'
app.config['MAIL_PASSWORD'] = '<app password>'
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USE_SSL'] = True

mail = Mail(app)

@app.route("/")
def index():
  msg = Message('Hello from the other side!', sender = '<new gmail account>@gmail.com', recipients = ['<my gmail address>@gmail.com'])
  msg.body = "This is a test email"
  mail.send(msg)
  return "Message sent!"

问题根因与修复

配置中Gmail SMTP服务器地址填写错误:

  • 错误值:smtp.google.com
  • 正确Gmail SMTP服务地址:smtp.gmail.com

将MAIL_SERVER配置项修正为正确地址后,邮件发送功能恢复正常,阻塞问题消失。

补充说明:使用Gmail SMTP服务发信,需提前开启账号两步验证,使用生成的应用专用密码作为MAIL_PASSWORD配置值,直接使用账号登录密码会触发鉴权失败。


内容的提问来源于stack exchange,提问作者Fernando Velasco Borea

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:19:07