python - Flask Mail,正在发送重复的邮件
问题描述
我正在使用 Python 和 Flask Mail。在用户通过单击之前作为电子邮件发送给用户以确认其帐户的链接来确认其帐户后,我正在尝试发送欢迎电子邮件。通过在数据库中将已确认条目的值更改为 true 来确认他的帐户后,我发送了欢迎电子邮件。但它发送了 5 封重复的电子邮件,而不是一封。
我使用了以下代码-
class AccountConfirmation(Resource):
@jwt_required
def post(self):
current_user_id = get_jwt_identity()
user = User.query.get(current_user_id)
user.confirmed = True
db.session.commit()
send_welcome_email(user)
return {'msg': 'Account confirmed successfully. You can now login to your account'}, 200
def send_welcome_email(user):
subject = '...'
body = '...'
sender = Config.ADMINS[0]
recipients = [user.email_id]
send_email(subject, body, sender, recipients)
from flask_mail import Message
def send_email(subject, body, sender, recipients):
msg = Message(subject = subject, body = body, sender=sender, recipients=recipients)
mail.send(msg)
解决方案
我没有发现代码有任何问题。除非有多个发送邮件的请求。要克服它,您可以尝试发送异步电子邮件。请检查这段代码,不要忘记检查链接以获得更好的解释。
from threading import Thread
# ...
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
Thread(target=send_async_email, args=(app, msg)).start()
推荐阅读
- r - 使用更新从线性混合模型中删除协变量
- git - 'git pull' 恢复其他人所做的更改
- javascript - 原子地增加 Firebase 实时数据库中的共享计数器
- excel - 在 VLOOKUP 中使用 INDIRECT 的替代方法
- c# - Google Cloud Vision API - 创建 Grpc.Core.Channel 时出错
- python - 我们如何在 Python 中的轮廓/边界之间绘制曲线?
- python - 使用 OpenPyxel 在 Excel 中插入多个图像不起作用
- python - tkinter 和 urllib 检查网站的问题
- python - 在 Django 中覆盖保存导致无限递归错误
- java - 如何访问字符串 json 有效负载并将其映射到 Spring 休息控制器中的对象?