Flask 郵件發送
- 2019 年 10 月 10 日
- 筆記
今天小婷兒給大家分享的是Flask 郵件發送。
Flask 郵件發送
一、Flask 郵件發送
from flask import Flask, render_template, current_app
from flask_script import Manager
from flask_mail import Mail, Message
from threading import Thread
app = Flask(__name__)
# 配置郵箱服務器
app.config['MAIL_SERVER'] = 'smtp.163.com'
# 郵箱用戶
app.config['MAIL_USERNAME'] = '郵箱@163.com'
# 用戶密碼
app.config['MAIL_PASSWORD'] = '郵箱密碼'
# 創建Mail對象
mail = Mail(app)
def async_send_mail(app, msg):
# 郵件發送需要在程序上下文中進行,
# 新的線程中沒有上下文,需要手動創建
with app.app_context():
mail.send(msg)
# 封裝函數發送郵件
def send_mail(subject, to, template, **kwargs):
# 從代理中獲取代理的原始對象
app = current_app._get_current_object()
# 創建用於發送的郵件消息對象
msg = Message(subject=subject, recipients=[to],
sender=app.config['MAIL_USERNAME'])
# 設置內容
msg.html = render_template(template, **kwargs)
# 發送郵件
# mail.send(msg)
thr = Thread(target=async_send_mail, args=[app, msg])
thr.start()
return '郵件已發送'
#路由配置
@app.route('/')
def index():
# 調用函數發送郵件
send_mail('賬戶激活', '郵件接收者地址', 'activate.html', username='xenia')
return '郵件已發送'
manager = Manager(app)
if __name__ == '__main__':
manager.run()
二、flask-mail
說明:
專門用於發送郵件的擴展庫,使用非常方便
安裝:
`pip install flask-mail`
使用:
配置郵件發送選項
創建郵件對象
創建消息對象
使用郵件對象發送消息
封裝函數發送郵件
將郵件發送的操作通過一個函數完成
使用者只需要在合適的地方調用即可
異步發送郵件
原因:受限於網絡的原因,可能會出現長時間等待的情況
解決:在新的線程中完成郵件的發送
問題:郵件發送需要程序上下文,而新的線程中沒有,因此需要手動創建程序上下文
理解:循環引用程序實例的解決方案是使用current_app代替app