烧瓶邮件:如何一次处理多个电子邮件请求

时间:2020-03-08 12:34:30

标签: flask flask-mail

因此,我编写了一个专用的flask应用程序来处理我的应用程序的电子邮件,并将其部署在heroku上。我在其中设置了发送电子邮件的路径:

@app.route('/send', methods=['POST'])
def send_now():
    with app.app_context():
      values = request.get_json()
      email = values['email']
      code = values['code']
      secret_2 = str(values['secret'])
      mail = Mail(app)
      msg = Message("Password Recovery",sender="no*****@gmail.com",recipients=[email])
      msg.html = "<h1>Your Recovery Code is: </h1><p>"+str(code)+"</p>"
      if secret == secret_2:
        mail.send(msg)
        response = {'message': 'EmailSent'}
        return jsonify(response), 201

一次一次只适用于一个用户,但是当多个用户发送POST请求时,客户端用户需要等待,直到POST返回201。因此等待时间持续增加(甚至可能不会发送)。因此,我该如何处理以便容纳多个同时用户。线程?缓冲?我不知道

1 个答案:

答案 0 :(得分:0)

您需要通过Python中的异步线程调用发送邮件。查看此代码示例并在您的代码中实现。

from threading import Thread
from app import app

def send_async_email(app, msg):
    with app.app_context():
        mail.send(msg)

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
    thr = Thread(target=send_async_email, args=[app, msg])
    thr.start()

这将允许在后台发送邮件。