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用户验证收不到邮件,代码照抄的,如何排查问题?
让我看什么?
这个问题很常见,代码照抄不工作,通常是环境配置或邮件服务商细节没对上。别慌,咱们一步步从代码里“揪”出问题。
首先,确保你的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)
核心排查点(按顺序检查):
-
看异常:上面代码用
try...except包住了mail.send()。运行后,如果发送失败,浏览器或终端会直接显示错误信息(比如认证失败、连接超时)。这是最重要的线索! 没有错误信息就加这个try-catch。 -
查密码:
MAIL_PASSWORD填的不是邮箱登录密码。对于Gmail、QQ邮箱等,需要在邮箱设置里开启SMTP服务,并生成一个 “应用专用密码” 或“授权码”。用这个密码填进去。 -
对配置:
MAIL_SERVER:确认SMTP服务器地址没错(Gmail是smtp.gmail.com,QQ邮箱是smtp.qq.com)。MAIL_PORT和MAIL_USE_TLS:通常端口587配合TLS=True,端口465配合SSL=True(需设置MAIL_USE_SSL = True)。和你抄的代码保持一致。MAIL_DEFAULT_SENDER:发件人地址,一般和MAIL_USERNAME一致。
-
验收件人:
recipients列表里的邮箱地址写对了没?别输错。 -
网络与环境:如果服务器在国外(如Gmail),国内网络可能连接不稳定或直接被墙。可以临时换用国内邮箱服务商(如QQ、163邮箱)的SMTP配置测试。在本地运行的话,检查防火墙是否屏蔽了SMTP端口。
一句话总结:先抓取发送时的具体异常信息,九成问题出在邮箱的SMTP授权码(应用密码)上。
题主你既然学 flask,知道 cocde.cc 吗? 那里面都是学 flask 的,去吧,皮卡丘。
我去看了下找到答案,我代码没错,全部进入垃圾邮件了尴尬!
追求到达率用邮件推送吧

