1. 程式人生 > >Flask-Mail使用163郵箱非同步傳送郵件

Flask-Mail使用163郵箱非同步傳送郵件

很多型別的應用程式都需要在特定事件發生時提醒使用者,而常用的通訊方法是電子郵件。
雖然 Python 標準庫中的 smtplib 包可用在 Flask 程式中傳送電子郵件,但包裝了 smtplib 的

Flask-Mail 擴充套件能更好地和 Flask 整合。

使用 pip 安裝 Flask-Mail:

(venv) $ pip install flask-mail

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是否開啟 DEBUG,預設為 app.debug
MAIL_USERNAME郵件伺服器使用者名稱,預設為 None
MAIL_PASSWORD郵件伺服器密碼,預設為 None
MAIL_DEFAULT_SENDER郵件發件人,預設為 None,也可在 Message 物件裡指定
MAIL_MAX_EMAILS郵件批量傳送個數上限,預設為 None
MAIL_SUPPRESS_SEND預設為 app.testing,如果為 True,則不會真的傳送郵件,供測試用
163郵箱配置
app.config['MAIL_SERVER'] = 'smtp.163.com'app.config['MAIL_PORT'] = 25app.config['MAIL_USE_TLS'] = Trueapp.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME')app.config['MAIL_PASSWORD'] =os.environ.get('MAIL_PASSWORD')app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]'app.config['FLASKY_MAIL_SENDER'
] = 'Flasky Admin <[email protected]>'


微軟 Windows 使用者可按照下面的方式設定環境變數:(<>改為'')

(venv) $ set MAIL_USERNAME=<Gmail username> 郵箱
(venv) $ set MAIL_PASSWORD=<Gmail password> 授權碼

在cmd下面,設定環境變數的時候,不需要引號,在powershell下面設定的時候,需要引號!!!

非同步傳送郵件程式碼:

mail = Mail(app)
def send_async_email(app, msg): with app.app_context(): mail.send(msg)
def send_email(to, subject, template, **kwargs): msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX'] + subject, sender=app.config['FLASKY_MAIL_SENDER'], recipients=[to]) msg.body = render_template(template + '.txt', **kwargs) msg.html = render_template(template + '.html', **kwargs) thr = Thread(target=send_async_email, args=[app, msg]) thr.start() return thr