代码是从官方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>')
PHPz2017-04-17 18:03:18
題主,這個問題我解決了。我也是使用的gmail信箱,遇到的報錯跟你貼出來的一樣。我猜題主應該用的也是PyCharm吧?
對,鍋子就是PyCharm的! 在flask中配置從venv的環境變數中讀入MAIL_USERNAME
和MAIL_PASSWORD
這兩個配置項,同時在PyCharm中使用venv作為解釋器運行程序,就會出現這樣的情況。
原因是,PyCharm中沒有讀到環境變量,也就是說上面提到的兩個配置項在程式運行的時候值為None(這個你在config.py
裡下個斷點就能看到),所以就會報這個530的錯誤了,因為你根本沒有登入信箱= =
我使用venv是把環境變數的export寫到了venv的activate
文件中(就是啟動venv時用到的那個文件),我想PyCharm並沒有讀這個文件的內容。要解決這個問題,可以有兩種方法:
使用終端來運行程序,已親測發送成功;
PyCharm中有個對當前項目解釋器的配置菜單,裡面有一項環境變量的配置,在此處添加環境變量的話,就能用PyCharm運行程序,並愉快的發確認郵件了;
順便感謝這個問題———flask-mail 用環境變數提取帳號密碼發送郵件出錯給我帶來的靈感。
高洛峰2017-04-17 18:03:18
看了一圈錯誤日誌,我想問題是你沒有修改郵箱的信息,使用的是原來代碼的:flasky@example.com 這個郵箱,那你明顯不可能有它的密碼的。
所以你需要做的是找到代碼中的郵箱和密碼配置,修改成你自己的。至於說你連不上 gmail ,列印內容顯示你是可以連上的,所以不需要擔心這個問題。
如果要再具體一點的話,你就打開 config.py 文件,找到 13 行,然後修改這兩個變數
MAIL_USERNAME = '你的邮箱'
MAIL_PASSWORD = '你的邮箱密码'
跑一遍試試,應該可以了。