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

Flask邮件发送正常但控制台出现大量红色SMTP日志,求解决方案

Flask邮件发送控制台红色输出问题解决

问题描述

我开发了一个简易Flask应用,需要向用户发送验证邮件。测试时邮件能正常发送,但应用控制台出现大量红色输出内容,作为新手不知道原因,求解释和解决办法。

邮件发送函数

@app.route("/confirm", methods=["POST", "GET"])
@login_required
def confirm():
    user_email = current_user.email
    token = serializer.dumps(user_email, salt="email-confirm")
    link = url_for("confirm_email", token=token, _external=True)
    msg = Message("Confirm Email", sender=app.config["MAIL_USERNAME"], recipients= [user_email])
    msg.body = render_template("public/email.html", user=current_user, link=link)
    msg.html = render_template("public/email.html", user=current_user, link=link)
    mail.send(msg)
    return render_template("public/index.html", time=time, user=current_user, link=link)

控制台红色输出内容

send: 'ehlo [172.31.128.1]\r\n'
reply: b'250-smtp.gmail.com at your service, [80.210.8.202]\r\n'
reply: b'250-SIZE 35882577\r\n'
reply: b'250-8BITMIME\r\n'
reply: b'250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH\r\n'
reply: b'250-ENHANCEDSTATUSCODES\r\n'
reply: b'250-PIPELINING\r\n'
reply: b'250-CHUNKING\r\n'
reply: b'250 SMTPUTF8\r\n'
reply: retcode (250); Msg: b'smtp.gmail.com at your service, [80.210.8.202]\nSIZE 35882577\n8BITMIME\nAUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH\nENHANCEDSTATUSCODES\nPIPELINING\nCHUNKING\nSMTPUTF8'
send: 'AUTH PLAIN AGZyZXNoLnBvdXJ5YUBnbWFpbC5jb20AeXFubmt6cXF2eWpud3VkZQ==\r\n'
reply: b'235 2.7.0 Accepted\r\n'
reply: retcode (235); Msg: b'2.7.0 Accepted'
send: 'mail FROM:<fresh.pourya@gmail.com> size=3274\r\n'
reply: b'250 2.1.0 OK q16-20020adfea10000000b002c559def236sm12683509wrm.57 - gsmtp\r\n'
reply: retcode (250); Msg: b'2.1.0 OK q16-20020adfea10000000b002c559def236sm12683509wrm.57 - gsmtp'
send: 'rcpt TO:<mr.guitar.clash@gmail.com>\r\n'
reply: b'250 2.1.5 OK q16-20020adfea10000000b002c559def236sm12683509wrm.57 - gsmtp\r\n'
reply: retcode (250); Msg: b'2.1.5 OK q16-20020adfea10000000b002c559def236sm12683509wrm.57 - gsmtp'
send: 'data\r\n'
reply: b'354  Go ahead q16-20020adfea10000000b002c559def236sm12683509wrm.57 - gsmtp\r\n'
reply: retcode (354); Msg: b'Go ahead q16-20020adfea10000000b002c559def236sm12683509wrm.57 - gsmtp'
data: (354, b'Go ahead q16-20020adfea10000000b002c559def236sm12683509wrm.57 - gsmtp')
send: b'Content-Type: multipart/mixed; boundary="===============1820571993399238898=="\r\nMIME-Version: 1.0\r\nSubject: Confirm Email\r\nFrom: fresh.pourya@gmail.com\r\nTo: mr.guitar.clash@gmail.com\r\nDate: Tue, 07 Mar 2023 18:29:08 +0330\r\nMessage-ID: <167820114761.3828.4077954944079907248@DESKTOP-TKGFEBA>\r\n\r\n--===============1820571993399238898==\r\nContent-Type: multipart/alternative;\r\n boundary="===============0785586450470497431=="\r\nMIME-Version: 1.0\r\n\r\n--===============0785586450470497431==\r\nContent-Type: text/plain; charset="utf-8"\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: 7bit\r\n\r\n<!DOCTYPE html>\r\n<html lang="en">\r\n<head>\r\n    <meta charset="UTF-8">\r\n    <title>Confirm Email</title>\r\n    <link href="https://fonts.googleapis.com/css2?family=Anton&family=Dancing+Script:wght@700&family=Mynerve&family=Roboto:wght@500&display=swap" rel="stylesheet">    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css">\r\n    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">\r\n\r\n</head>\r\n<body>\r\n    <div class="container-fluid" style="background-color: #666666; padding: 5% 20px 0; margin: 0">\r\n        <h1 style="font-family: 'Dancing Script', cursive; margin: 0">Favorite Cafe</h1>\r\n\r\n    </div>\r\n    <div class="container-fluid" style="background-color: #6096B4; padding: 5%">\r\n        <h3 style="margin: 0">Dear FATEMEH mohamadi</h3>\r\n        <p>click on the link blow to active confirm your email account this link will expire after 24 hours</p>\r\n        <a href="http://127.0.0.1:5000/confirm-email/Im1yLmd1aXRhci5jbGFzaEBnbWFpbC5jb20i.J0k1dPV51jFl1QMzo6tdg3UeWWU">Confirm</a>\r\n\r\n    </div>\r\n</body>\r\n</html>\r\n--===============0785586450470497431==\r\nContent-Type: text/html; charset="utf-8"\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: 7bit\r\n\r\n<!DOCTYPE html>\r\n<html lang="en">\r\n<head>\r\n    <meta charset="UTF-8">\r\n    <title>Confirm Email</title>\r\n    <link href="https://fonts.googleapis.com/css2?family=Anton&family=Dancing+Script:wght@700&family=Mynerve&family=Roboto:wght@500&display=swap" rel="stylesheet">    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css">\r\n    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">\r\n\r\n</head>\r\n<body>\r\n    <div class="container-fluid" style="background-color: #666666; padding: 5% 20px 0; margin: 0">\r\n        <h1 style="font-family: 'Dancing Script', cursive; margin: 0">Favorite Cafe</h1>\r\n\r\n    </div>\r\n    <div class="container-fluid" style="background-color: #6096B4; padding: 5%">\r\n        <h3 style="margin: 0">Dear FATEMEH mohamadi</h3>\r\n        <p>click on the link blow to active confirm your email account this link will expire after 24 hours</p>\r\n        <a href="http://127.0.0.1:5000/confirm-email/Im1yLmd1aXRhci5jbGFzaEBnbWFpbC5jb20i.J0k1dPV51jFl1QMzo6tdg3UeWWU">Confirm</a>\r\n\r\n    </div>\r\n</body>\r\n</html>\r\n--===============0785586450470497431==--\r\n\r\n--===============1820571993399238898==--\r\n.\r\n'
reply: b'250 2.0.0 OK  1678201150 q16-20020adfea10000000b002c559def236sm12683509wrm.57 - gsmtp\r\n'
reply: retcode (250); Msg: b'2.0.0 OK  1678201150 q16-20020adfea10000000b002c559def236sm12683509wrm.57 - gsmtp'
data: (250, b'2.0.0 OK  1678201150 q16-20020adfea10000000b002c559def236sm12683509wrm.57 - gsmtp')
send: 'quit\r\n'
reply: b'221 2.0.0 closing connection q16-20020adfea10000000b002c559def236sm12683509wrm.57 - gsmtp\r\n'
reply: retcode (221); Msg: b'2.0.0 closing connection q16-20020adfea10000000b002c559def236sm12683509wrm.57 - gsmtp'
127.0.0.1 - - [07/Mar/2023 18:29:09] "GET /confirm HTTP/1.1" 200 -

问题原因

这些红色输出是Flask-Mail底层SMTP库的调试日志,不是错误。它详细记录了应用和Gmail SMTP服务器之间的通信全过程,包括握手、认证、发送邮件内容、服务器响应等步骤。所有返回码(250、235、354、221)都是SMTP协议的正常响应码,说明邮件发送流程完全正常。

解决办法

1. 关闭SMTP调试日志

如果不想看到这些日志,可以通过调整日志级别来关闭:

import logging
# 仅保留SMTP相关的错误日志,关闭调试信息
logging.getLogger('smtplib').setLevel(logging.WARNING)

2. 禁用Flask-Mail调试模式

直接在Flask配置中关闭邮件调试:

app.config['MAIL_DEBUG'] = False

3. 优化邮件内容格式

你的代码中msg.body使用了HTML模板,导致纯文本部分也是HTML代码,建议单独创建纯文本模板(如email_text.html),仅保留文字内容,这样不支持HTML的邮件客户端也能正常显示邮件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:07:06