Flask -mail: как обрабатывать несколько запросов электронной почты одновременно - PullRequest
0 голосов
/ 08 марта 2020

Итак, я написал специальное приложение 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 голосов
/ 08 марта 2020

Вам необходимо отправить почту через асинхронные потоковые вызовы в 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()

Это позволит отправлять почту в фоновом режиме.

...