>  Q&A  >  본문

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

我在自学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:<flasky@example.com> 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 <flasky@example.com>')
PHP中文网PHP中文网2742일 전863

모든 응답(5)나는 대답할 것이다

  • PHPz

    PHPz2017-04-17 18:03:18

    질문자님, 이 문제를 해결했습니다. 저도 Gmail을 사용하고 있는데 제가 겪은 오류는 귀하가 게시한 오류와 동일합니다. 질문자도 PyCharm을 사용해야 할 것 같은데요, 그렇죠?

    예, 냄비는 PyCharm의 것입니다! venv의 환경 변수에서 두 가지 구성 항목 MAIL_USERNAMEMAIL_PASSWORD을 읽도록 Flask를 구성하고 동시에 venv를 인터프리터로 사용하여 PyCharm에서 프로그램을 실행하면 이러한 상황이 발생합니다.

    이유는 PyCharm에서 환경 변수를 읽지 않기 때문입니다. 이는 위에서 언급한 두 구성 항목이 프로그램 실행 시 None 값을 갖는다는 것을 의미합니다(config.py에서 중단점을 설정하면 이를 확인할 수 있습니다). 따라서 이 530 오류는 귀하가 이메일에 전혀 로그인하지 않았기 때문에 보고됩니다 = =

    venv를 사용하여 venv의 activate 파일(venv를 시작할 때 사용되는 파일)에 환경 변수 내보내기를 작성했는데, PyCharm이 이 파일의 내용을 읽지 않은 것 같습니다. 이 문제를 해결하려면 두 가지 방법이 있습니다.

    1. 터미널을 사용하여 프로그램을 실행하면 테스트를 거쳐 성공적으로 전송되었습니다.

    2. PyCharm에는 환경 변수 구성이 포함된 현재 프로젝트 인터프리터에 대한 구성 메뉴가 있습니다. 여기에 환경 변수를 추가하면 PyCharm을 사용하여 프로그램을 실행하고 확인 이메일을 보낼 수 있습니다.

    그런데 이 질문 덕분에 플라스크 메일은 환경 변수를 사용하여 계정 비밀번호를 추출하고 영감을 얻기 위해 이메일을 보냈습니다.

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-17 18:03:18

    오류 로그 끝(http 530)을 보면 메일함에 로그인되어 있지 않거나 계정과 비밀번호를 확인하지 않았거나 로컬에서 메일함에 전혀 액세스할 수 없습니다.

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 18:03:18

    공식 이메일은 Google입니다. qq 또는 163으로 변경할 수 있습니다.

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 18:03:18

    530, '5.5.1 인증이 필요합니다.

    이 메시지는 이메일을 보내기 전에 인증을 받아야 하며 익명 이메일을 보낼 수 없음을 나타냅니다.

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-17 18:03:18

    오류 로그를 읽어본 결과 문제는 이메일 정보를 수정하지 않았고 원래 코드인 플라스크@example.com 이메일을 사용하고 있어서 분명히 비밀번호를 알 수 없다는 점이라고 생각합니다.

    그러므로 해야 할 일은 코드에서 이메일과 비밀번호 구성을 찾아 자신의 것으로 수정하는 것입니다. Gmail에 연결할 수 없다는 사실은 인쇄된 내용에 연결할 수 있다고 표시되므로 이 문제에 대해 걱정할 필요가 없습니다.

    더 구체적으로 알고 싶다면 config.py 파일을 열고 13행을 찾은 다음 이 두 변수를 수정하면 됩니다

    으아악

    실행해서 시도해 보세요. 괜찮을 것입니다.

    회신하다
    0
  • 취소회신하다