使用Flask-Mail發送郵件


簡介

在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/

 

   

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM