Flask Mail 对异步发送邮件进行封装

Posted gongnanxiong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask Mail 对异步发送邮件进行封装相关的知识,希望对你有一定的参考价值。

安装

pip install Flask-Mail

Config.py

class Config:
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_ECHO = False
    MAIL_SERVER = smtp.126.com
    MAIL_USERNAME = xxx@126.com
    MAIL_PASSWORD = xxx

新建py文件send_mail.py:然后新建一个类BaseMail  继承Flask Mail的 Mail

from flask_mail import Mail
from flask import current_app
from threading import Thread


class BaseMail(Mail):
    def async_send_mail(self, message):
        # current_app._get_current_object() 返回当前app
        thread = Thread(target=self._send_async_mail, args=[current_app._get_current_object(), message])
        thread.start()

    def _send_async_mail(self, app, message):
        with app.app_context():
            self.send(message)

app.py:这时初始化Mail的时候直接用继承后的BaseMail

from tools.send_email import BaseMail
app = Flask(__name__)
mail = BaseMail(app)
def create_app(config_name=test):
    app.config.from_object(app_config[config_name])
    mail.init_app(app)
    return app

view中使用:直接import app.py中的mail进行发送,使用mail.async_send_mail方式即可异步发送

from init import mail
from flask_mail import Message
# send email
msg = Message(用户创建成功通知, sender=xxxxx@126.com, recipients=[‘abc@163.com‘,‘abc@126.com‘]) 
msg.html = <h3>尊敬的<span style="color: red">%s</span>帅哥/美女:</h3><div>您的账号已经创建成功,请妥善保管您的密码,祝你使用愉快~</div> % username mail.async_send_mail(msg)

 

以上是关于Flask Mail 对异步发送邮件进行封装的主要内容,如果未能解决你的问题,请参考以下文章

Flask-mail 发邮件慢(即使异步)

Flask异步发送邮件的方法

Flask-Mail发送QQ邮件

使用flask-mail通过gmail发送电子邮件

使用内嵌图像Flask-Mail发送电子邮件?

使用flask-mail扩展发送邮件