python - Flask Web开发,用户注册完需要邮箱确认问题
PHP中文网
PHP中文网 2017-04-17 18:01:18
0
5
823

我在自学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 ')
PHP中文网
PHP中文网

认证高级PHP讲师

全員に返信 (5)
PHPzhong

题主,这个问题我解决了。我也是使用的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 用环境变量提取账号密码发送邮件出错给我带来的灵感。

いいねを押す+0
    Peter_Zhu

    看你的错误日志最后面,http 530,并没有登录到邮箱,检查一下帐号密码,或者你本地压根访问不了你的邮箱

    いいねを押す+0
      伊谢尔伦

      官方是谷歌的邮箱,你换qq或者163吧。

      いいねを押す+0
        Ty80

        530, '5.5.1 Authentication Required.

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

        いいねを押す+0
          小葫芦

          看了一圈错误日志,我想问题是你没有修改邮箱的信息,使用的是原来代码的:flasky@example.com 这个邮箱,那你明显不可能有它的密码的。

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

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

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

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

          いいねを押す+0
            最新のダウンロード
            詳細>
            ウェブエフェクト
            公式サイト
            サイト素材
            フロントエンドテンプレート
            私たちについて 免責事項 Sitemap
            PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!