在python Flask应用程序中异步发送欢迎电子邮件
当用户首次登录(fb auth)到我们的flask应用程序时,我试图向用户发送一封欢迎电子邮件 因此,我考虑将flask mail用于电子邮件框架,并将Cellery(用于rabbitmq的python客户端)用作任务队列 因此,我有一个简单的电子邮件框架:在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
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()