Python學習之Flask-Mail非同步郵件傳送
阿新 • • 發佈:2019-01-10
學習Pythonweb中的微型flask框架有幾天了,深深的感覺flask上的外掛用著非常的方便,使用起來也是非常的舒服,突然有種不想學javaweb的衝動!(東西太多了。。)
首先介紹下flask-mail:
- python 標準庫中的smtplib 包 可以用在 flask 程式中傳送電子郵件
- 而 flask-mail封裝了smtplib 可以更好的與 Flask 框架整合起來
注意:在使用Flask-Mail傳送郵件之前首先要確保你使用的郵箱中的smtp服務開啟,不同郵箱的開啟方法不同,這個自己百度就行,這裡介紹下QQ郵箱的開啟方法。
在QQ郵箱中的設定中找到賬戶:
在下面找到服務選項:
注意:記得儲存好給你的授權碼,在程式中如果儘量不要把授權碼直接寫入,可以儲存到環境變數中使用的時候從環境中匯入。
還有每個郵箱的埠也是不一樣的,具體看郵箱的客戶端中的設定,比如騰訊的協議如下:
具體程式碼如下:
import threading
from flask import Flask
from flask.ext.mail import Mail, Message
app = Flask(__name__)
app.config.update(
DEBUG = True,
MAIL_SERVER='smtp.qq.com' ,
MAIL_PROT=465,
MAIL_USE_TLS = True,
MAIL_USE_SSL = False,
MAIL_USERNAME = '郵箱地址',
MAIL_PASSWORD = = os.environ.get('MAIL_PASSWORD'),#從系統中獲取授權碼
MAIL_DEBUG = True
)
mail = Mail(app)
@app.route('/')
def index():
send_mail()
print('email send!!')
return "Sent"
def send_async_email(app, msg):
with app.app_context():
mail.send(msg)
def send_mail():
#sender-發件人郵箱 recipients-收件人郵箱
msg = Message("Hi!This is a test ",sender='*********@qq.com', recipients=['*********@qq.com'])
msg.body = "This is a first email"
#Flask支援很多,比如附件和抄送等功能,根據需要自己新增就可以
# msg.attach 郵件附件新增
# msg.attach("檔名", "型別", 讀取檔案)
# with app.open_resource("F:\2281393651481.jpg") as fp:
# msg.attach("image.jpg", "image/jpg", fp.read())
thr = threading.Thread(target =send_async_email, args = [app,msg])#建立執行緒
thr.start()
if __name__ == "__main__":
app.run()
Flask-Mail 使用同步模式傳送電子郵件。
從電子郵件傳送開始,直到電子郵件交付後,給瀏覽器發回其響應,在整個過程中,Web伺服器會一直阻塞。如果我們試圖傳送電子郵件到一個伺服器是緩慢的,甚至更糟糕的,暫時處於離線狀態,所以使用多執行緒非同步傳送電子郵件可以避免處理請求過程中不必要的延遲,將傳送電子郵件的函式移到後臺執行緒中,能夠使程式更加流暢!但實際上,還可以用其他的方式,比如執行緒和多程序模組也可以實現非同步任務。
這個根據需求來具體實現。
以上就是使用flask-mail來實現非同步郵件傳送的一些基本內容