python - Flask Web开发,用户注册完需要邮箱确认问题

 Idi-amin_643 发布于 2022-10-31 01:42

我在自学Flask,在看《FlaskWeb开发:基于Python的Web应用开发实战》这本书,目前已经做到了用户注册这一块,卡在了用户注册完需要邮箱确认才可以更完整的编辑信息,是不是用Venv模拟环境下是不能发送邮件的?这一点很迷惑,希望有前辈能指点一下。


界面图片如下:

代码是从官方github克隆的。

from ..email import send_email
@auth.route('/register', methods = ['GET', 'POST'])
def register():
form = RegistrationForm()
if form.validate_on_submit():
# ...
db.session.add(user)
db.session.commit()
token = user.generate_confirmation_token()
send_email(user.email, 'Confirm Your Account',
'auth/email/confirm', user=user, token=token)
flash('A confirmation email has been sent to you by email.')
return redirect(url_for('main.index'))
return render_template('auth/register.html', form=form)

报错

send: 'ehlo [192.168.0.66]\r\n'
reply: '250-smtp.googlemail.com at your service, [119.130.184.228]\r\n'
reply: '250-SIZE 35882577\r\n'
reply: '250-8BITMIME\r\n'
reply: '250-STARTTLS\r\n'
reply: '250-ENHANCEDSTATUSCODES\r\n'
reply: '250-PIPELINING\r\n'
reply: '250-CHUNKING\r\n'
reply: '250 SMTPUTF8\r\n'
reply: retcode (250); Msg: smtp.googlemail.com at your service, [119.130.184.228
]
SIZE 35882577
8BITMIME
STARTTLS
ENHANCEDSTATUSCODES
PIPELINING
CHUNKING
SMTPUTF8
send: 'STARTTLS\r\n'
reply: '220 2.0.0 Ready to start TLS\r\n'
reply: retcode (220); Msg: 2.0.0 Ready to start TLS
send: 'ehlo [192.168.0.66]\r\n'
reply: '250-smtp.googlemail.com at your service, [119.130.184.228]\r\n'
reply: '250-SIZE 35882577\r\n'
reply: '250-8BITMIME\r\n'
reply: '250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH\r\n'
reply: '250-ENHANCEDSTATUSCODES\r\n'
reply: '250-PIPELINING\r\n'
reply: '250-CHUNKING\r\n'
reply: '250 SMTPUTF8\r\n'
reply: retcode (250); Msg: smtp.googlemail.com at your service, [119.130.184.228
]
SIZE 35882577
8BITMIME
AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
ENHANCEDSTATUSCODES
PIPELINING
CHUNKING
SMTPUTF8
send: 'mail FROM: size=1748\r\n'
reply: '530-5.5.1 Authentication Required. Learn more at\r\n'
reply: '530 5.5.1  https://support.google.com/mail/answer/14257 eh9sm8453423pad.
47 - gsmtp\r\n'
reply: retcode (530); Msg: 5.5.1 Authentication Required. Learn more at
5.5.1  https://support.google.com/mail/answer/14257 eh9sm8453423pad.47 - gsmtp
send: 'rset\r\n'
reply: '250 2.1.5 Flushed eh9sm8453423pad.47 - gsmtp\r\n'
reply: retcode (250); Msg: 2.1.5 Flushed eh9sm8453423pad.47 - gsmtp
send: 'quit\r\n'
reply: '221 2.0.0 closing connection eh9sm8453423pad.47 - gsmtp\r\n'
reply: retcode (221); Msg: 2.0.0 closing connection eh9sm8453423pad.47 - gsmtp
Exception in thread Thread-3:
Traceback (most recent call last):
  File "c:\python27\Lib\threading.py", line 801, in __bootstrap_inner
    self.run()
  File "c:\python27\Lib\threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "C:\Users\Administrator\myproject\flasky\app\email.py", line 9, in send_a
sync_email
    mail.send(msg)
  File "C:\Users\Administrator\myproject\venv\lib\site-packages\flask_mail.py",
line 416, in send
    message.send(connection)
  File "C:\Users\Administrator\myproject\venv\lib\site-packages\flask_mail.py",
line 351, in send
    connection.send(self)
  File "C:\Users\Administrator\myproject\venv\lib\site-packages\flask_mail.py",
line 168, in send
    message.as_string())
  File "c:\python27\Lib\smtplib.py", line 731, in sendmail
    raise SMTPSenderRefused(code, resp, from_addr)
SMTPSenderRefused: (530, '5.5.1 Authentication Required. Learn more at\n5.5.1  h
ttps://support.google.com/mail/answer/14257 eh9sm8453423pad.47 - gsmtp', 'Flasky
 Admin ')
5 个回答
  • 看了一圈错误日志,我想问题是你没有修改邮箱的信息,使用的是原来代码的:flasky@example.com 这个邮箱,那你明显不可能有它的密码的。

    所以你需要做的是找到代码中的邮箱和密码配置,修改成你自己的。至于说你连不上 gmail ,打印内容显示你是可以连上的,所以不需要担心这个问题。

    如果要再具体一点的话,你就打开 config.py 文件,找到 13 行,然后修改这两个变量

    MAIL_USERNAME = '你的邮箱'
    MAIL_PASSWORD = '你的邮箱密码'

    跑一遍试试,应该可以了。

    2022-10-31 22:29 回答
  • 530, '5.5.1 Authentication Required.

    出现这个提示说明你需要认证才可以发送邮件,不可以发送匿名邮件。

    2022-10-31 22:29 回答
  • 官方是谷歌的邮箱,你换qq或者163吧。

    2022-10-31 22:29 回答
  • 看你的错误日志最后面,http 530,并没有登录到邮箱,检查一下帐号密码,或者你本地压根访问不了你的邮箱

    2022-10-31 22:29 回答
  • 题主,这个问题我解决了。我也是使用的gmail邮箱,遇到的报错跟你贴出来的一样。我猜题主应该用的也是PyCharm吧?

    对,锅就是PyCharm的!在flask中配置从venv的环境变量中读入MAIL_USERNAMEMAIL_PASSWORD这两个配置项,同时在PyCharm中使用venv作为解释器运行程序,就会出现这样的情况。

    原因是,PyCharm中没有读到环境变量,也就是说上面提到的两个配置项在程序运行的时候值为None(这个你在config.py里下个断点就能看到),所以就会报这个530的错误了,因为你根本没有登录邮箱= =

    我使用venv是把环境变量的export写到了venv的activate文件中(就是启动venv时用到的那个文件),我想PyCharm并没有读这个文件的内容。要解决这个问题,可以有两种方法:

    1. 使用终端来运行程序,已亲测发送成功;

    2. PyCharm中有个对当前项目解释器的配置菜单,里面有一项环境变量的配置,在此处添加环境变量的话,就能用PyCharm运行程序,并愉快的发确认邮件了;

    顺便感谢这个问题———flask-mail 用环境变量提取账号密码发送邮件出错给我带来的灵感。

    2022-10-31 22:30 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有