簡介
在WEB開發時,我們常常會使用到發送郵件的功能,注冊時或者更換密碼時,需要驗證郵箱,在flask的擴展中有Flask-mai來幫助完成這一功能
配置
flask-mail發送郵件需要你提供你的郵箱賬號和密碼。某些配置是發送郵箱所必須的·。大部分flask初學者一般沒有雲主機和域名來搭建郵箱服務器,所以我們只能使用qq等郵件服務商給你的郵箱
這里介紹了如何配置郵箱的config
開發在mail文件夾中
#/app/config
MAIL_SERVER = 'smtp.qq.com'
MAIL_PORT = 465
MAIL_USE_TLS = False
MAIL_USE_SSL = True
# 注意此處,很多人配置發不出去和這個是有關系的
MAIL_PASSWORD = '**********'
MAIL_USERNAME = '********@qq.com'
此處以qq郵箱為例子,我們填入了qq郵箱的服務器地址,他的郵箱服務的端口,TLS,SSL的選擇–這是很多人發不出去郵件的關鍵之一,賬號和密碼–發不出去郵箱的另一個關鍵!
QQ郵箱是使用SSL的,然后注意QQ郵箱此處的密碼不是你的qq密碼!!
不是你的QQ密碼!!
。。我在這個坑陷了很久~~很久 ~~很久·
這個密碼你登陸qq郵箱,選擇設置,然后點擊賬號
郵箱的密碼就是此處的授權碼填入后的給你的密碼。
126等郵箱發不出去也是因為其有自己的設置。
功能實現
實現我們需要一個app實例
#/usr/bin/env python
# mail/app.py
from flask import Flask
from flask_mail import Mail, Message
from threading import Thread
app = Flask(__name__)
mail = Mail(app)
def send_async_email(app,msg):
with app.app_context():
mail.send()
def SendMail():
msg = Message('test',sender='***@qq.com',\
recipients=["***@example.com"])
#recipients是個列表,包含所有收件人
#此處的test是郵箱的主題,sender和config中的MAIL_USERNAME要一致哦
msg.body = 'testbody'
msg.html = '<b>test</b>body'
#郵件發送給目標,可以有文本,兩種方式呈現,你能看見怎樣的取決於你的客戶端
thr = Thread(target=send_async_email,args=[app,msg])
#使用多線程,在實際開發中,若是不使用異步、多線程等方式,網頁會卡住
thr.start()
return 'ok'
在當前文件夾使用python
>>from app import SendMail
>>SendMail()
郵件就會成功發出去啦
補充
在具體實踐中,發送郵箱會被抽象成一個函數,msg的body和html形式一般會使用flask的render_tempalte來渲染
發送大量郵件時,QQ、126郵箱服務器很有可能認為你在發送垃圾郵件因此發不出去。
生產環境時應當使用自己搭的郵箱服務器,或者郵箱服務商提供的企業郵箱
參考
flask-login中文文檔 http://www.pythondoc.com/flask-mail/
