Отправка электронной почты - это операция, которая занимает много времени.Если вы включите журналы, вы увидите, что сделано несколько звонков.Это не относится к AWS или вашему серверу.
Отправка электронных писем должна быть асинхронной задачей в вашем приложении фляги.
Есть много способов сделать это.Вы можете просто провести рефакторинг своего кода и написать функцию с помощью @async
декоратора, мега-учебника о колбах , который довольно хорошо описывает детали.
#[...other imports...]
from threading import Thread
def async(f):
def wrapper(*args, **kwargs):
thr = Thread(target=f, args=args, kwargs=kwargs)
thr.start()
return wrapper
@async
def send_async_email(app, msg):
with app.app_context():
mail.send(msg)
@application.route('/contact', methods=['GET', 'POST'])
def send():
if request.method == 'POST':
first_name = request.form['first_name']
last_name = request.form['last_name']
email = request.form['email']
msg = Message('Hey!', sender='example@example.com', recipients=['example@example.com'])
msg.body = email + " " + first_name + " " + last_name + " "
send_async_email(application, msg)
msg2 = Message('Hello', sender='example@example.com', recipients=[email])
msg2.body = "Hi " + first_name + ". Thanks for requesting access to our beta. We'll contact you soon to schedule a call."
send_async_email(application, msg)
return render_template('contact.html')
return render_template ('index.html')
Поскольку вы запускаете свое приложение на AWS, вытакже может использовать SES вместо Flask-Mail.
Другие решения могут заключаться в использовании очереди сообщений , такой как RabbitMQ, но это потребует написания гораздо большего количества кода.
Все эти решения сделают электронную почту отправленной в фоновом режиме, что позволит вашему приложению в колбе возвращать ответ клиенту, не дожидаясь отправки электронной почты.