from threading import Thread from flask import render_template from flask_mail import Message from app import mail, 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 mail.send(msg) # Thread works surprisingly badly behind uwsgi, just let a uwsgi worker do its thing instead. #Thread(target=send_async_email, args=(app, msg)).start() def send_password_reset_email(user): token = user.get_reset_password_token() hostname = app.config['REAL_HOSTNAME'] send_email('[Blog] Reset Password', sender=app.config['ADMINS'][0], recipients=[user.email], text_body=render_template('email/reset_password.txt', hostname=hostname, user=user, token=token), html_body=render_template('email/reset_password.html', hostname=hostname, user=user, token=token))