Flask-Security - незаменимое расширение, если вам надо быстро и безболезнено реализовать поддержку регистрации, логина, восстановления пароля для вашего Flask приложения.
Однако с ним есть маленькая беда. Дело в том, что все заголовки писем, отправляемых при его помощи захардкожены как строки в коде, а для того или иного приложения есть смысл в замене темы сообщения 'Welcome'
на 'Подтвердите ваш аккаунт'
и тд.
Благо кастомизация отпарвки сообщений таки была предусмотрена автором, только не думаю, что именно это он имел ввиду, когда добавлял для стейта расширения аттрибут _send_mail_task
. Так или иначе, если нам нужно взять и поменять какую-то тему сообщения на новую мы можем сделать это так,
appname/app.py
from flask import Flask
from flask.ext.security import Security
from appname.utils import send_mail
app = Flask('appname')
...
security = Security(app, datastore)
app.extensions['security']._send_mail_task = send_mail
appname/utils.py
from flask import current_app
from flask.ext.babel import gettext as _
def send_mail(message):
if message.subject == 'Welcome':
message.subject = _('Confirm your account')
mail = current_app.extensions['mail']
mail.send(message)
Совсем не красивое, но рабочее решение. Также я разместил новый тикет на трекере проекта, посмотрим, что скажет автор на мою попытку сделать кастомизацию заголовков более натуральным способом, через задание их в настройках приложения аналогично контекстным сообщениям, которые генерируются Flask-Security.
UPD. Не только меня волновала эта проблема и посему благодаря фиксам Anthony Plunkett в версии 1.5.1 заголовки сообщений от Flask-Security
можно задавать в настройках проекта как:
SECURITY_EMAIL_SUBJECT_REGISTER = 'Confirm your account'
Все доступные настройки описаны в документации.