如果我的异步send_email函数中出现异常,我会尝试显示错误, 但即使在后台线程中发生异常后,数据仍会存储在数据库中。except 块永远不会被执行。我试图阻止数据库提交并重定向到带有错误消息的页面
send_email 函数文件
from threading import Thread
from flask import current_app,render_template,flash
from flask_mail import Message
from feedback import mail
def send_async_email(app, msg):
try:
with app.app_context():
mail.send(msg)
except:
raise Exception("Exception occurred in Mail")
return False
def send_email(to,subject,template,**kwargs):
app = current_app._get_current_object()
msg=Message(current_app.config['MAIL_SUBJECT_PREFIX'] + subject,
sender=current_app.config['MAIL_SENDER'],recipients=[to])
msg.body=render_template(template +'.txt',**kwargs)
msg.html=render_template(template +'.html',**kwargs)
try:
thr = Thread(target=send_async_email, args=[app, msg])
thr.start()
return thr
except:
raise Exception("Error occured")
视图.py
@home.route('/register',methods=["GET","POST"])
def register():
# form=LoginForm()
form=LoginForm(prefix="login")
form1=RegisterForm(prefix="register")
print(form1.errors)
if form1.validate_on_submit():
users=Users(email=form1.email.data.strip())
users.set_password(form1.password.data.strip())
organization=Organization(organization_name=form1.org_name.data.strip())
organization.userorg.append(users)
db.session.add(users)
db.session.add(organization)
db.session.flush()
token=users.generate_confirmation_token()
try:
print("INSIDE TRY BLOCK")
email=send_email(users.email,'Confirm your account','email/confirm_email',user=users,token=token)
except Exception as e:
print("INSIDE Exception BLOCK")
print(e)
flash("Errors","danger")
db.session.rollback()
return redirect(url_for('home.home_view'))
db.session.commit()
flash("A confirmation email has been sent")
return redirect(url_for('home.home_view'))
return render_template('home/landing-semi.html',form=form,form1=form1)
收到的错误
raise SMTPSenderRefused(code, resp, from_addr)
smtplib.SMTPSenderRefused: (530, b'5.5.1 Authentication Required. Learn more at\n5.5.1 https://support.google.com/mail/?p=WantAuthError g10-v6sm7818697pfi.148 - gsmtp', '=?utf-8?q?Osfapp_Admin?= <lmnography@gmail.com>')
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib64/python3.6/threading.py", line 916, in _bootstrap_inner
self.run()
File "/usr/lib64/python3.6/threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "/home/leon/Leon/Projects/fmsappv/feedback/modules/utilties.py", line 12, in send_async_email
raise Exception("Exception occurred in Mail")
Exception: Exception occurred in Mail