2

ユーザーがフラスコアプリケーションに最初にログイン (fb auth) したときに、ウェルカムメールをユーザーに送信しようとしています。

そこで、メールフレームワークにflask-mail、タスクキューにcelery(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 アプリケーション コンテキストが必要であることはわかっています。そして、セロリのセロリ インスタンスも必要です。それはフラスコアプリの一部であるべきですか?要するに、私は少しのガイダンスを探しています。よろしくお願いします。

4

1 に答える 1

2

グリンバーグのチュートリアルに示されているように、スレッドでそれを行うことができます

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 からのメッセージを非同期的にポーリングする方法)。ウェルカムメールにこのようなものが本当に必要だとは思いませんが、バッチで送信しない限り、そのようなものをここで使用する方法の例を見つけることができます

于 2018-03-29T07:30:55.310 に答える