最近在學(xué)《Flask Web開發(fā):基于Python的Web應(yīng)用開發(fā)實戰(zhàn)》(第二版)中的第六章,遇到了一些問題,在此記錄一下:
app.config['MAIL_SERVER'] = 'smtp.qq.com'
app.config['MAIL_PORT'] = 25
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME') #或者直接使用郵箱
#app.config['MAIL_USERNAME'] = '16***935@qq.com'
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD') #或者直接使用授權(quán)碼'zqx****txnpdfbej'
app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]'
app.config['FLASKY_MAIL_SENDER'] = 'Administrator Chen <16***6935@qq.com>' #這里的郵箱要和MAIL_USERNAME一樣,否則會報錯
app.config['FLASKY_RECEIVER'] = os.environ.get('FLASKY_RECEIVER') #或者直接使用'1500****76@qq.com',這里的郵箱是接收者郵箱
這里需要注意的坑有:
- 代碼中使用的是qq郵箱服務(wù)器,所以MAIL_SERVER是smtp.qq.com
- MAIL_PASSWORD并不是qq郵箱密碼,而是使用授權(quán)碼,進入郵箱>賬戶>POP3/IMAP/SMTP/Exchange/CardAV/CalDAV服務(wù),開啟POP3/SMTP服務(wù),按照qq郵箱的提示開啟POP3/SMTP服務(wù)。這里直接使用QQ郵箱密碼會報535錯誤。
- 代碼中使用的MAIL_USERNAME和MAIL_PASSWORD的值是在環(huán)境變量中讀取的,因為是臨時環(huán)境變量,所以必須要在同一個Terminal窗口下執(zhí)行(mac):
export MAIL_USERNAME='16***6935@qq.com'
export MAIL_PASSWORD='zqx****txnpdfbej'
export FLASKY_RECEIVER='1500****76@qq.com'
其中MAIL_USERNAME是發(fā)送者郵箱賬戶名,MAIL_PASSWORD是發(fā)送者郵箱賬戶授權(quán)密碼,F(xiàn)LASKY_RECEIVER是用于接收的郵箱??紤]到自己寫的項目只是本地學(xué)習(xí)和驗證,為了方便,可以將這些密碼直接寫在代碼中,就像注釋那樣。
- 建議直接通過下面代碼啟動服務(wù)器:
if __name__ == '__main__':
app.run(debug=True)
通過以下命令啟動web服務(wù)器并不方便:
export FLASK_APP=hello.py
export FALSK_DEBUG=1
flask run
其余代碼和書中相同。
結(jié)果:
如果使用環(huán)境變量的方式,則先在Pycharm自帶的Terminal下面執(zhí)行:
export MAIL_USERNAME='16***6935@qq.com'
export MAIL_PASSWORD='zqx****txnpdfbej'
export FLASKY_RECEIVER='1500****76@qq.com'
然后,啟動服務(wù)器:python hello.py
在web頁面中輸入user

圖片.png
然后QQ郵箱就會收到郵件:

圖片.png
參考代碼