Python中Flask用户验证收不到邮件,代码照抄的,如何排查问题?

程序没有报错,就是可不到邮件,不知道哪里出了问题
send: ‘ehlo [192.168.1.101]\r\n’
reply: b’250-mail\r\n’
reply: b’250-PIPELINING\r\n’
reply: b’250-AUTH LOGIN PLAIN\r\n’
reply: b’250-AUTH=LOGIN PLAIN\r\n’
reply: b’250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrusxxSUCa0xDrUUUUj\r\n’
reply: b’250-STARTTLS\r\n’
reply: b’250 8BITMIME\r\n’
reply: retcode (250); Msg: b’mail\nPIPELINING\nAUTH LOGIN PLAIN\nAUTH=LOGIN PLAIN\ncoremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrusxxSUCa0xDrUUUUj\nSTARTTLS\n8BITMIME’
send: ‘STARTTLS\r\n’
reply: b’220 Ready to start TLS\r\n’
reply: retcode (220); Msg: b’Ready to start TLS’
send: ‘ehlo [192.168.1.101]\r\n’
reply: b’250-mail\r\n’
reply: b’250-PIPELINING\r\n’
reply: b’250-AUTH LOGIN PLAIN\r\n’
reply: b’250-AUTH=LOGIN PLAIN\r\n’
reply: b’250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrTpkykUCa0xDrUUUUj\r\n’
reply: b’250-STARTTLS\r\n’
reply: b’250 8BITMIME\r\n’
reply: retcode (250); Msg: b’mail\nPIPELINING\nAUTH LOGIN PLAIN\nAUTH=LOGIN PLAIN\ncoremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrTpkykUCa0xDrUUUUj\nSTARTTLS\n8BITMIME’
send: ‘AUTH PLAIN ADEzMTY2MzM3OTE5QDE2My5jb20AYTEyMzEyMw==\r\n’
reply: b’235 Authentication successful\r\n’
reply: retcode (235); Msg: b’Authentication successful’
send: ‘mail FROM:<[email protected]>\r\n’
reply: b’250 Mail OK\r\n’
reply: retcode (250); Msg: b’Mail OK’
send: ‘rcpt TO:<[email protected]>\r\n’
reply: b’250 Mail OK\r\n’
reply: retcode (250); Msg: b’Mail OK’
send: ‘data\r\n’
reply: b’354 End data with <CR><LF>.<CR><LF>\r\n’
reply: retcode (354); Msg: b’End data with <CR><LF>.<CR><LF>’
data: (354, b’End data with <CR><LF>.<CR><LF>’)
send: b’Content-Type: multipart/mixed; boundary="===============5894479498722303218=="\r\nMIME-Version: 1.0\r\nSubject: [Flasky] Confirm Your Account\r\nFrom: =?utf-8?q?Flasky_Admin?= <[email protected]>\r\nTo:
[email protected]\r\nDate: Sun, 14 May 2017 12:44:58 +0800\r\nMessage-ID: <149473709779.8096.5644776744267083978@THINKPAD-PC>\r\n\r\n–===============5894479498722303218==\r\nContent-Type: multipart/alternative;

r\n boundary="===============8736041487175388237=="\r\nMIME-Version: 1.0\r\n\r\n–===============8736041487175388237==\r\nContent-Type: text/plain; charset=“utf-8”\r\nMIME-Version: 1.0\r\nContent-Transfer-Encodin
g: 7bit\r\n\r\nDear asdfasdf,\r\n\r\nWelcome to Flasky!\r\n\r\nTo confirm your account please click on the following link:\r\n\r\nhttp://127.0.0.1:5000/auth/confirm/eyJhbGciOiJIUzI1NiIsImlhdCI6MTQ5NDczNzA5NywiZXh
wIjoxNDk0NzQwNjk3fQ.eyJjb25maXJtIjoxfQ.w9GNmAwREq0QrnWfd_4YUwSPzD1vOYod5JyV3nZX3l8\r\n\r\nSincerely,\r\n\r\nThe Flasky Team\r\n\r\nNote: replies to this email address are not monitored.\r\n–===============873604
1487175388237==\r\nContent-Type: text/html; charset=“utf-8”\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: 7bit\r\n\r\n<p>Dear asdfasdf,</p>\r\n<p>Welcome to <b>Flasky</b>!</p>\r\n<p>To confirm your account p
lease <a href=“http://127.0.0.1:5000/auth/confirm/eyJhbGciOiJIUzI1NiIsImlhdCI6MTQ5NDczNzA5NywiZXhwIjoxNDk0NzQwNjk3fQ.eyJjb25maXJtIjoxfQ.w9GNmAwREq0QrnWfd_4YUwSPzD1vOYod5JyV3nZX3l8”>click here</a>.</p>\r\n<p>Alter
natively, you can paste the following link in your browser’s address bar:</p>\r\n<p>http://127.0.0.1:5000/auth/confirm/eyJhbGciOiJIUzI1NiIsImlhdCI6MTQ5NDczNzA5NywiZXhwIjoxNDk0NzQwNjk3fQ.eyJjb25maXJtIjoxfQ.w9GNmA
wREq0QrnWfd_4YUwSPzD1vOYod5JyV3nZX3l8</p>\r\n<p>Sincerely,</p>\r\n<p>The Flasky Team</p>\r\n<p><small>Note: replies to this email address are not monitored.</small></p>\r\n–===============8736041487175388237==–
\r\n\r\n–===============5894479498722303218==–\r\n.\r\n’
reply: b’250 Mail OK queued as smtp7,C8CowAAHnTgw4RdZBNcoFA–.2907S3 1494737201\r\n’
reply: retcode (250); Msg: b’Mail OK queued as smtp7,C8CowAAHnTgw4RdZBNcoFA–.2907S3 1494737201’
data: (250, b’Mail OK queued as smtp7,C8CowAAHnTgw4RdZBNcoFA–.2907S3 1494737201’)
send: ‘quit\r\n’
reply: b’221 Bye\r\n’
reply: retcode (221); Msg: b’Bye’

这个也没有报错,代码是我直接拷下来了,邮箱这我改成了 163 邮箱
Python中Flask用户验证收不到邮件,代码照抄的,如何排查问题?


5 回复

让我看什么?


这个问题很常见,代码照抄不工作,通常是环境配置或邮件服务商细节没对上。别慌,咱们一步步从代码里“揪”出问题。

首先,确保你的Flask-Mail配置是完整的,并且放在正确的位置。下面是一个最基础的、可运行的示例,你对照着看缺了哪块:

from flask import Flask
from flask_mail import Mail, Message

app = Flask(__name__)

# 以下是关键配置,必须填对,尤其是密码
app.config['MAIL_SERVER'] = 'smtp.gmail.com'  # 以Gmail为例
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = 'your_email@gmail.com'  # 你的发件邮箱
app.config['MAIL_PASSWORD'] = 'your_app_password'  # 注意:这里不是邮箱登录密码,是“应用专用密码”
app.config['MAIL_DEFAULT_SENDER'] = 'your_email@gmail.com'

mail = Mail(app)

@app.route('/send-test')
def send_test():
    msg = Message('Hello from Flask',
                  recipients=['recipient@example.com'])  # 收件人邮箱
    msg.body = 'This is a test email sent from a Flask app.'
    try:
        mail.send(msg)
        return 'Email sent!'
    except Exception as e:
        return f'Failed to send email: {str(e)}'  # 捕获异常,这是关键排查点

if __name__ == '__main__':
    app.run(debug=True)

核心排查点(按顺序检查):

  1. 看异常:上面代码用try...except包住了mail.send()。运行后,如果发送失败,浏览器或终端会直接显示错误信息(比如认证失败、连接超时)。这是最重要的线索! 没有错误信息就加这个try-catch。

  2. 查密码MAIL_PASSWORD 填的不是邮箱登录密码。对于Gmail、QQ邮箱等,需要在邮箱设置里开启SMTP服务,并生成一个 “应用专用密码” 或“授权码”。用这个密码填进去。

  3. 对配置

    • MAIL_SERVER:确认SMTP服务器地址没错(Gmail是smtp.gmail.com,QQ邮箱是smtp.qq.com)。
    • MAIL_PORTMAIL_USE_TLS:通常端口587配合TLS=True,端口465配合SSL=True(需设置MAIL_USE_SSL = True)。和你抄的代码保持一致。
    • MAIL_DEFAULT_SENDER:发件人地址,一般和MAIL_USERNAME一致。
  4. 验收件人recipients列表里的邮箱地址写对了没?别输错。

  5. 网络与环境:如果服务器在国外(如Gmail),国内网络可能连接不稳定或直接被墙。可以临时换用国内邮箱服务商(如QQ、163邮箱)的SMTP配置测试。在本地运行的话,检查防火墙是否屏蔽了SMTP端口。

一句话总结:先抓取发送时的具体异常信息,九成问题出在邮箱的SMTP授权码(应用密码)上。

题主你既然学 flask,知道 cocde.cc 吗? 那里面都是学 flask 的,去吧,皮卡丘。

我去看了下找到答案,我代码没错,全部进入垃圾邮件了尴尬!

追求到达率用邮件推送吧

回到顶部