Flask外掛程式系列 Flask Mail

2021-09-23 07:04:33 字數 3583 閱讀 9721

簡介

給使用者傳送郵件是 web 應用中最常見的任務之一,比如使用者註冊,找回密碼等。python 內建了乙個 smtplib 的模組,可以用來傳送郵件,這裡我們使用 flask-mail,是因為它可以和 flask 整合,讓我們更方便地實現此功能。

安裝

使用 pip 安裝:

$ pip install flask-mail 

$ git clone  

$ cd flask-mail 

$ python setup.py install  

傳送郵件

flask-mail 連線到簡單郵件傳輸協議 (****** mail transfer protocol, smtp) 伺服器,並把郵件交給這個伺服器傳送。這裡以 qq 郵箱為例,介紹如何簡單地傳送郵件。在此之前,我們需要知道 qq 郵箱的伺服器位址和埠是什麼,點此檢視。

# -*- coding: utf-8 -*- 

from flask import flask 

from flask_mail import mail, message 

import os 

'[email protected]'

'123456'

def index(): 

msg = message('hi', sender='[email protected]', recipients=['[email protected]']) 

msg.html = 'hello web'

# msg.body = 'the first email!'

mail.send(msg) 

return

''if __name__ == '__main__': 

在傳送前,需要先設定使用者名稱和密碼,當然你也可以直接寫在檔案裡,如果是從環境變數讀取,可以這麼做:

$ export mail_username='[email protected]'

$ export mail_password='123456'

將上面的 sender 和 recipients 改一下,就可以進行測試了。

從上面的**,我們可以知道,使用 flask-mail 傳送郵件主要有以下幾個步驟:

建立乙個 message 訊息例項,有三個引數:郵件標題、傳送者和接收者

建立郵件內容,如果是 html 格式,則使用 msg.html,如果是純文字格式,則使用 msg.body

最後呼叫 mail.send(msg) 傳送訊息

flask-mail 配置項

flask-mail 使用標準的 flask 配置 api 進行配置,下面是一些常用的配置項:

配置項說明

mail_server

郵件伺服器位址,預設為 localhost

mail_port

郵件伺服器端口,預設為 25

mail_use_tls

是否啟用傳輸層安全 (transport layer security, tls)協議,預設為 false

mail_use_ssl

是否啟用安全套接層 (secure sockets layer, ssl)協議,預設為 false

mail_debug

mail_username

郵件伺服器使用者名稱,預設為 none

mail_password

郵件伺服器密碼,預設為 none

mail_default_sender

郵件發件人,預設為 none,也可在 message 物件裡指定

mail_max_emails

郵件批量傳送個數上限,預設為 none

mail_suppress_send

非同步傳送郵件

使用上面的方式傳送郵件,會發現頁面卡頓了幾秒才出現訊息,這是因為我們使用了同步的方式。為了避免傳送郵件過程**現的延遲,我們把傳送郵件的任務移到後台執行緒中,**如下:

# -*- coding: utf-8 -*- 

from flask import flask 

from flask_mail import mail, message 

from threading import thread 

import os 

'smtp.example.com'

'123456'

mail.send(msg) 

def send_email(): 

msg = message('hi', sender='[email protected]', recipients=['[email protected]']) 

msg.html = 'send email asynchronously'

thr.start() 

return

'send successfully'

if __name__ == '__main__': 

在上面,我們建立了乙個執行緒,執行的任務是send_async_email,該任務的實現涉及乙個問題1:

帶附件的郵件

批量傳送

with mail.connect() as conn: 

foruser

in users: 

subject = "hello, %s" % user.name

msg = message(recipients=[user.email], body='...', subject=subject) 

conn.send(msg)  

上面的工作方式,使得應用與電子郵件伺服器保持連線,一直到所有郵件已經傳送完畢。某些郵件伺服器會限制一次連線中的傳送郵件的上限,這樣的話,你可以配置 mail_max_emails。

需要注意的是,更好的傳送大量電子郵件的方式是用專門的作業系統,比如用 celery 任務佇列等。

Flask外掛程式系列之flask celery

現在繼續學習在整合的框架中如何使用celery.在flask中整合celery需要做到兩點 celery必須能順利載入初始化檔案。由於celery程序的執行和flask程序的執行是相互獨立的,但是在框架中我們希望只使用乙份配置檔案,這樣可以簡化配置的工作。from celery import cel...

Flask常用外掛程式

flask特點 1 小而精的代表 2 基於werkzeug工具箱編寫的輕量級web開發框架,它主要面向需求簡單,專案周期短的web小應用 3 靈活,核心思想是flask只完成基本的功能,別的功能都是靠各種第三方外掛程式來完成的,實現了模組高度化定製 常用的flask外掛程式如下 flask sqla...

flask筆記三 flask login外掛程式的使用

flask login外掛程式的使用 安裝 pip install flask login初始化loginmanager loginmanager設定 loginmanager loginmanager loginmanager.login view biziness.flask login 業務邏...