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



我正在尝试在用户首次登录(fb auth)到我们的烧瓶应用程序时向用户发送欢迎电子邮件。

所以我正在考虑使用烧瓶邮件作为电子邮件框架和芹菜(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 应用程序上下文才能正常工作。然后我也需要芹菜的芹菜实例。这应该是烧瓶应用程序的一部分吗?简而言之,我正在寻找一点指导。提前感谢您的帮助。

你可以用线程来做到这一点,如格林伯格的教程所示

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 的消息的方法)。虽然我认为你真的不需要这样的东西来发送欢迎电子邮件 - 除非你分批发送它们,你可以在这里找到如何使用这些东西的例子

相关内容

  • 没有找到相关文章

最新更新