很多Web應(yīng)用需要在諸如用戶注冊、密碼找回等過程中,進(jìn)行用戶身份的有效性認(rèn)證。采用電子郵箱進(jìn)行確認(rèn)是一種常用的方式。Python標(biāo)準(zhǔn)庫smtplib可以實現(xiàn)發(fā)送電子郵件的功能,F(xiàn)lask框架的Flask-mail包裝了smtplib庫,擴(kuò)展了對電子郵件發(fā)送的支持。
十余年的合肥網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整合肥建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“合肥網(wǎng)站設(shè)計”,“合肥網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。可以采用pip安裝Flask-mail:
pip install flask-mail1
創(chuàng)建email的藍(lán)本(app/__init__.py
):
from app.email import email as blueprint_email app.register_blueprint(blueprint_email,url_prefix='/email')12
在初始化文件中導(dǎo)入mail對象:
from flask_mail import Mail mail=Mail(app)
Flask-mail可以連接SMTP服務(wù)器,并把郵件利用這個服務(wù)器發(fā)送出去。Flask-mail需要進(jìn)行參數(shù)配置,常見參數(shù)如下:
序號 | 參數(shù) | 默認(rèn)值 | 說明 |
---|---|---|---|
1 | MAIL_SERVER | localhost | SMTP服務(wù)器主機(jī)或者IP地址 |
2 | MAIL_PORT | 25 | 電子郵件服務(wù)器端口 |
3 | MAIL_USE_TLS | False | 是否啟用傳輸層安全協(xié)議(TLS) |
4 | MAIL_USE_SSL | False | 是否啟用安全套接層協(xié)議(SSL) |
5 | MAIL_USERNAME | None | 電子郵箱賬號用戶名 |
6 | MAIL_PASSWORD | None | 電子郵箱賬號密碼 |
7 | MAIL_DEBUG | False | 是否啟動調(diào)試 |
在config.py
配置文件中設(shè)置(以126郵箱為例,需要開啟SMTP服務(wù)):
#郵件配置 MAIL_SERVER='smtp.126.com' MAIL_PORT=25MAIL_USE_TLS=True MAIL_USERNAME='***@126.com' MAIL_PASSWORD='******' MAIL_DEBUG=True1234567
完成初始化后,創(chuàng)建一個Message實例,包含需要發(fā)送郵件的信息(文件/app/email/views.py
)。
#coding:utf-8 from flask import render_template,current_app from app.email import email from flask_mail import Message@email.route('/send/<string:content>',methods=['POST','GET']) def sendmail(content): #發(fā)送郵件 msg=Message(u'郵件主題',sender='***@126.com',recipients=['***@qq.com']) msg.body=u'郵件內(nèi)容' msg.html=u'<h4>郵件html:{0}</h4>'.format(content) #獲取當(dāng)前app對象 app=current_app._get_current_object() with app.app_context(): from app import mail mail.send(msg) return 'Send'
其中,sender是郵件的發(fā)送者,recipients包含了全部收件者的郵箱地址列表。
我們可以發(fā)現(xiàn),在發(fā)送郵件的過程中,會出現(xiàn)程序停滯現(xiàn)象,瀏覽器也會出現(xiàn)等待,為了避免這個問題,可以采用異步方式來發(fā)送郵件。封裝郵件發(fā)送函數(shù),并啟動子線程來發(fā)送郵件(文件/app/email/sendMail.py
):
#coding:utf-8 from flask_mail import Message from flask import render_template,current_app from threading import Thread #發(fā)送郵箱的子線程類 class SendMailThread(Thread): def __init__(self,app,msg): super(SendMailThread,self).__init__() self.__app=app self.__msg=msg #異步發(fā)送郵件 def send_asyc_mail(self,app,msg): with app.app_context(): from app import mail mail.send(msg) def run(self): #發(fā)送郵件 self.send_asyc_mail(self.__app,self.__msg) #封裝郵件發(fā)送過程 # 參數(shù): # subject:郵件主題 # recv:收件郵箱地址 # template:郵件內(nèi)容的模板 # kw:模板參數(shù)鍵值對列表 def send_mail(subject,recv,template,**kw): msg=Message(subject,sender='***@126.com',recipients=recv) msg.body=u'郵件內(nèi)容' msg.html=render_template(template,**kw) # 獲取當(dāng)前app對象 app=current_app._get_current_object() # 子線程發(fā)送 send=SendMailThread(app,msg) send.start()
在/app/email/views.py
中定義新的處理函數(shù):
import sendMail #異步發(fā)送郵件 @email.route('/asyc_send/',methods=['POST','GET']) def sendAsycMail(): subject=u'異步發(fā)送郵件測試' rec=['***@qq.com'] tp='email/send.html' test='test' #異步發(fā)送郵件 sendMail.send_mail(subject=subject,recv=rec,template=tp,test=test) return 'Asyc Send!!!'
上面將郵件內(nèi)容放在模板中,這樣更具有擴(kuò)展性。采用異步方式發(fā)送郵件,可以提高用戶體檢,發(fā)送過程也流暢了許多。
當(dāng)然,有興趣的同學(xué),可以使用celery實現(xiàn)異步發(fā)送。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當(dāng)前名稱:Flask中電子郵件的使用-創(chuàng)新互聯(lián)
文章起源:http://www.rwnh.cn/article48/dspiep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、品牌網(wǎng)站設(shè)計、網(wǎng)站內(nèi)鏈、網(wǎng)站排名、網(wǎng)頁設(shè)計公司、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容