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

Flask-Mail身份验证错误抛出异常的捕获处理方案咨询

解决方案

问题根源

你现有代码的逻辑错误在于:mail.connect()方法在连接失败(比如账号密码错误、服务器无法连通)时会直接抛出SMTP相关异常,不会返回None,因此你写的判断分支永远无法触发,异常会直接向上抛出打断程序运行。同时你代码中存在重复初始化Mail实例的冗余代码,可以删除。

优化后代码

from flask import Flask, request
from flask_mail import Mail, Message
import smtplib # 引入smtplib用于捕获对应异常
import os, sys

app = Flask(__name__)

# 先配置参数再初始化Mail实例,删除重复初始化的冗余代码
app.config['MAIL_SERVER']='smtp.gmail.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_DEBUG'] = True
app.config['MAIL_USERNAME'] = 'xyz@gmail.com'
app.config['MAIL_PASSWORD'] = 'njhkjkjj'
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USE_SSL'] = True
mail = Mail(app)

@app.route('/email')
def get_email():
    try:
        # 把连接、发送邮件的逻辑全部放入try块中
        conn = mail.connect()
        msg = Message('visitor blocked', sender = 'abc@gmail.com', recipients = ['xyz@gmail.com'])
        msg.body = "Hello, this is email test."
        mail.send(msg)
        print("Email setup is ready. Email is sent..")
        return "邮件发送成功"
    except smtplib.SMTPAuthenticationError:
        # 捕获认证错误,对应你测试的密码错误场景
        print("Email setup/password is incorrect. Input your email creadentials in python app..")
        return "邮件账号或密码错误"
    except smtplib.SMTPConnectError:
        # 捕获服务器连接错误
        print("无法连接到邮件服务器,请检查服务器地址和端口配置")
        return "邮件服务器连接失败"
    except Exception as e:
        # 兜底捕获其他所有未知错误
        print(f"邮件发送出现未知错误:{str(e)}")
        return f"邮件发送失败:{str(e)}"

改动说明

  • 新增smtplib模块引入,用于精准捕获SMTP相关的各类异常
  • 调整了Mail实例初始化的顺序,先配置参数再初始化,删除了重复初始化的冗余代码
  • 用try-except结构包裹所有邮件相关操作逻辑,针对不同错误场景返回不同提示,覆盖认证错误、连接错误以及其他未知异常
  • 给接口新增了返回值,方便调用方直接看到错误提示,你也可以根据自己的需求调整输出逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:06:00