我正在尝试向用户发送欢迎电子邮件,当他/她首次登录(fb auth)我们的烧瓶应用程序时。
所以我正在考虑将电子邮件框架的烧瓶邮件和芹菜(兔子的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应用程序上下文才能正常工作。然后我也需要芹菜的芹菜实例。这应该是烧瓶应用程序的一部分吗?总之,我正在寻找一点指导。在此先感谢您的帮助。
答案 0 :(得分:0)
您可以使用Grinberg's tutorial
中显示的主题执行此操作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()
然后在您看来,您可以拨打send_email
而不必等待
如果您想在电子邮件中加入反馈(即发送电子邮件时出现错误时的实时信息),您应该向实现添加消息代理(即rabbitmq,zeromq)和任务队列(即芹菜) (以及一种异步轮询来自UI的消息的方法)。虽然我不认为你真的需要这样的东西来欢迎电子邮件 - 除非你批量发送它们,你可以找到一个如何使用这些东西的例子here