我想在加载芹菜后更改Flask-Mail的邮件配置。因此,用户可以在Web界面中更改邮件配置。但是我无法更改邮件配置,因为celery始终使用旧的空邮件设置。
我找到了一种解决方法,但感觉被黑了:
@celery.task
def async_test_email():
""" send a test email. Sender and recipient are the same. """
p = Preferences.query.first()
if p is None:
current_app.logger.warning('No Preferences could be found. Abort.')
return
msg = Message("Hello",
sender=p.mail_default_sender,
recipients=[p.mail_default_sender])
# override all mail settings every time the task runs
current_app.config.update(p.mail_config)
mail.app = current_app
mail.state = mail.init_app(current_app)
with current_app.app_context():
mail.send(msg)
这样,我可以在运行时更改邮件配置。但是我真的不喜欢这种解决方案。我试图在另一项任务中更改邮件配置,并希望更改能够继续进行,但不起作用。
我找到了this question,但仍然无法持久保存对邮件设置的更改。
问候