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

安装

pip install Flask-Mail

Config.py

class Config:
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_ECHO = False
    MAIL_SERVER = ‘smtp.126.com‘
    MAIL_USERNAME = ‘[email protected]‘
    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=‘[email protected]‘, recipients=[‘[email protected]‘,‘[email protected]‘]) msg.html = ‘<h3>尊敬的<span style="color: red">%s</span>帅哥/美女:</h3><div>您的账号已经创建成功,请妥善保管您的密码,祝你使用愉快~</div>‘ % username
mail.async_send_mail(msg)

原文地址:https://www.cnblogs.com/gongnanxiong/p/11743144.html

时间: 2024-10-08 19:41:40

Flask Mail 对异步发送邮件进行封装的相关文章

pythonWeb框架flask中使用blinker信号机制解耦业务代码解决ImportError: cannot import name &#39;app&#39;,以异步发送邮件为例

百度了大半天,不知道怎么搞,直到学习了blinker才想到解决办法,因为之前写java都是文件分开的, 所以发送邮件业务代码也放到view里面,但是异步线程需要使用app,蛋疼的是其他模块不能从app.py导入任何变量: 即: app.py是主文件,view.py是业务文件, 我需要在view中使用app中的变量,怎么办,百度了很多,没有找到方法 这里可以用信号实现,先记录一下: python3内置了blinker,可以直接使用,首先在view里定义信号: 然后在app.py里面连接需要使用的函

iOS开发——post异步网络请求封装

IOS中有许多网络请求的函数,同步的,异步的,通过delegate异步回调的. 在做一个项目的时候,上网看了很多别人的例子,发现都没有一个简单的,方便的异步请求的封装例子.我这里要给出的封装代码,是异步的,post的请求方式.通过ios的原生函数简单封装.通过这个封装可以方便的访问http服务器,获取数据,也可以容易的异步加载网络图片. 首先新建一个httpHelper类,在这个类里进行封装,封装的函数名称就叫做post,参数有请求的地址url,请求的参数params,返回数据后回调的函数blo

异步线程任务封装

异步线程任务封装可以参考Chrome中Callback和tuple实现. Callback.h #ifndef __callback_h__ #define __callback_h__ #pragma once #include "base/tuple.h" #include "raw_scoped_refptr_mismatch_checker.h" // Callback跟Task很像, 但没有参数限制, 实质上是面向对象的函数指针. // // Callba

【demo】自己写的一个 SpringMail 异步发送邮件的demo。 javamail 邮件异步发送

原文:[demo]自己写的一个 SpringMail 异步发送邮件的demo. javamail 邮件异步发送 源代码下载地址:http://www.zuidaima.com/share/1550463483120640.htm [demo]自己写的一个 SpringMail 异步发送邮件的demo. javamail 邮件异步发送 (注意 配置里面的账号跟发件人账号要一致) 1. 请各位在跑单元测试的时候,在 spring-mail.xml 文件中配置自己的邮箱账号和密码 (我已经注释掉了)

[转帖]linux - 使用mail命令快速发送邮件

linux - 使用mail命令快速发送邮件 https://baijiahao.baidu.com/s?id=1609503763223879322&wfr=spider&for=pc 要相信 很多东西没那么复杂. linux运维菜 发布时间:18-08-2221:27优质原创作者 前言 Linux系统中mail命令可以直接发送邮件. CentOS/RHEL安装 yum -y install mailx mail命令参数 -s <邮件主题>:指定邮件的主题: -c <地

Flask异步发送邮件

from flask import Flask from flask.ext.mail import Mail, Message from threading import Thread app = Flask(__name__) app.config.update(dict( MAIL_SERVER='smtp.qq.com', MAIL_PORT=587, MAIL_USE_TLS=True, MAIL_USERNAME = '[email protected]', #use to send

LNMP笔记:解决mail函数不能发送邮件

用LNMP环境,在探针里测试发送邮件,失败了.已经确定mail()函数是开启的. 问题根源 没有安装或启动 sendmail 组件 解决办法 我是新手,命令不熟,所以写的很详细,老鸟勿喷哦 1.重新安装 sendmail 组件,我用的是 CentOS ,使用下面的命令安装 1 yum install sendmail 2.使用下面的命令重启php-fpm进程 1 /etc/init.d/php-fpm restart 3.检测sendmail是否运行正常 1 /etc/init.d/sendma

linux中mail函数不能发送邮件怎么办

原因分析: 1.检查下本机25端口是否有开放 2.mail是利用linux自带的sendmail服务来发送邮件的,service sendmail status 查看下该服务的状态 发送命令:mail -s -v  "hell" [email protected] < test.txt 没有安装或启动 sendmail 组件 1.重新安装 sendmail 组件,我用的是 CentOS ,使用下面的命令安装 yum install sendmail 2.使用下面的命令重启php-

Node.js用ES6原生Promise对异步函数进行封装

版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可.转载请注明来源http://blog.csdn.net/azureternite 目录(?)[+] Promise的概念 Promise 对象用于异步(asynchronous)计算..一个Promise对象代表着一个还未完成,但预期将来会完成的操作. Promise的几种状态: pending:初始状态,即等待操作的执行 fulfilled:成功的操作 rejected:失败的操作 pending的状态