簡介
給使用者傳送郵件是 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
'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 業務邏...