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