Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python Flask应用程序中异步发送欢迎电子邮件_Python_Asynchronous_Flask_Rabbitmq_Celery - Fatal编程技术网

在python Flask应用程序中异步发送欢迎电子邮件

在python Flask应用程序中异步发送欢迎电子邮件,python,asynchronous,flask,rabbitmq,celery,Python,Asynchronous,Flask,Rabbitmq,Celery,当用户首次登录(fb auth)到我们的flask应用程序时,我试图向用户发送一封欢迎电子邮件 因此,我考虑将flask mail用于电子邮件框架,并将Cellery(用于rabbitmq的python客户端)用作任务队列 因此,我有一个简单的电子邮件框架: from flask.ext.mail import Message from app import mail def send_email(subject, sender, recipients, text_body, html

当用户首次登录(fb auth)到我们的flask应用程序时,我试图向用户发送一封欢迎电子邮件

因此,我考虑将flask mail用于电子邮件框架,并将Cellery(用于rabbitmq的python客户端)用作任务队列

因此,我有一个简单的电子邮件框架:

from flask.ext.mail import Message
from app import mail

    def send_email(subject, sender, recipients, text_body, html_body):
        msg = Message(subject, sender = sender, recipients = recipients)
        msg.body = text_body
        msg.html = html_body
        mail.send(msg)

我一直在阅读芹菜文档,但我不知道如何创建发送电子邮件所需的任务。我知道Flask mail需要Flask应用程序上下文才能正常工作。然后我还需要芹菜的例子。这应该是烧瓶应用程序的一部分吗?简言之,我正在寻求一点指导。提前感谢你的帮助

可以使用线程执行此操作,如中所示

然后,在您的视图中,您可以呼叫
发送电子邮件
,而无需等待


如果您希望为电子邮件合并反馈(在发送电子邮件时出错的情况下也称为实时信息),则应向实现中添加消息代理(即rabbitmq、zeromq)和任务队列(即芹菜)(以及异步轮询UI消息的方法)。尽管我不认为欢迎电子邮件真的需要这样的东西——除非你成批发送它们,否则你可以找到如何使用这些东西的示例

你可能想查看的Python部分中的异步调用。或者,查看exim。它是一种软件,您可以将其用作邮件服务器。您可以将其配置为接受邮件,然后将邮件异步放入队列并发送到另一个真正的邮件服务器。否则,您通常会询问如何创建芹菜任务来发送电子邮件。你描述了一些很有可能的事情。芹菜任务可以导入Flask应用程序并创建上下文。你不应该在这里有问题。
from threading import Thread

def threading(f):
    def wrapper(*args, **kwargs):
        thr = Thread(target=f, args=args, kwargs=kwargs)
        thr.start()
    return wrapper

@threading
def send_email(subject, to, body, html=None):
    def send():
        try:
            mail.send(msg)
        except Exception as err:
            app.logger.error("Error during mail send: {0}".format(err))

    with app.app_context():
        msg = Message(subject, recipients=[to], body=body, html=html,
                      sender="welcome@myapp.net")

        send()