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

Flask使用Gmail发送邮件报SMTPSenderRefused 530认证错误如何解决

问题根因及修复方案

你遇到的530认证错误核心是配置项名称写错,同时还有遗漏导入的问题,修正方案如下:

  • 缺少os模块导入:代码中调用了os.getenv()但没有导入os,会先触发模块未找到的错误
  • Flask-Mail配置字段错误:Flask-Mail读取用户名的配置项是MAIL_USERNAME,你写的MAIL_USER是无效字段,导致邮箱用户名没有被正确传入认证逻辑,直接触发认证失败
  • 路由POST分支缺少返回值:POST请求处理完成后没有返回响应,会触发Flask路由异常

修正后完整代码

import os
from flask import Flask, render_template, redirect, request
from flask_mail import Mail, Message

app = Flask(__name__)

app.config["MAIL_SERVER"] = "smtp.gmail.com"
app.config["MAIL_PORT"] = 587
app.config["MAIL_USE_TLS"] = True
# 修正配置项名称为MAIL_USERNAME
app.config["MAIL_USERNAME"] = os.getenv("MAIL_USERNAME")
app.config["MAIL_DEFAULT_SENDER"] = os.getenv("MAIL_USERNAME")
app.config["MAIL_PASSWORD"] = os.getenv("MAIL_PASSWORD")
mail = Mail(app)

@app.route("/", methods=["GET", "POST"])
def index():
    if request.method == "POST":
        recipient = request.form.get("email")
        msg = Message("Welcome on board!", recipients=[recipient])
        mail.send(msg)
        # 补全POST分支返回
        return "邮件发送成功"
    elif request.method == "GET":
        return render_template("greetings.html")

剩余问题排查

如果修正后还有问题,可以按以下顺序排查:

  1. 确认谷歌账号已开启两步验证,且生成的应用专用密码对应你当前使用的邮箱
  2. 运行时打印环境变量os.getenv("MAIL_USERNAME")和os.getenv("MAIL_PASSWORD"),确认能正常读取到正确的凭证内容
  3. 确认邮箱没有被谷歌临时限制登录,可登录邮箱查看安全提醒邮件确认

内容的提问来源于stack exchange,提问作者Muhammad Abd-Elsattar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:12:01