emails: allow user to define email sender name (#44411)

This commit is contained in:
Nicolas Roche 2020-06-25 18:49:26 +02:00
parent b314c1f9a8
commit 02052aff40
6 changed files with 44 additions and 5 deletions

View File

@ -28,7 +28,10 @@ class ValidEmailField(forms.EmailField):
class EmailsForm(forms.Form):
default_from_email = ValidEmailField(label=_('Default From'))
default_from_email = ValidEmailField(label=_('Default From'),
help_text=_('Sender email address'))
email_sender_name = forms.CharField(label=_('Sender Name'), required=False,
help_text=_('Custom sender name (defaults to global title)'))
global_email_prefix = forms.CharField(label=_('Prefix'), required=False,
help_text=_('Custom prefix for emails subject (defaults to global title)'))
email_signature = forms.CharField(label=_('Signature'), required=False,

View File

@ -24,7 +24,7 @@ from .forms import EmailsForm
class HomeView(VariablesFormMixin, TemplateView):
template_name = 'hobo/emails_home.html'
variables = ['default_from_email', 'global_email_prefix', 'email_signature']
variables = ['default_from_email', 'email_sender_name', 'global_email_prefix', 'email_signature']
form_class = EmailsForm
success_message = _('Emails settings have been updated. '
'It will take a few seconds to be effective.')

View File

@ -47,6 +47,7 @@ AUTO_VARIABLES = (
'default_from_email',
'global_email_prefix',
'email_signature',
'email_sender_name',
'global_title',
'robots_txt',
'meta_description',

View File

@ -183,9 +183,10 @@ class TemplateVars(FileBaseSettingsLoader):
tenant_settings.TEMPLATE_VARS[key] = value
if variables.get('default_from_email'):
if variables.get('global_title'):
from_label = variables.get('email_sender_name') or variables.get('global_title')
if from_label:
tenant_settings.DEFAULT_FROM_EMAIL = '"%s" <%s>' % (
variables['global_title'].replace('"', ' '), variables['default_from_email'])
from_label.replace('"', ' '), variables['default_from_email'])
else:
tenant_settings.DEFAULT_FROM_EMAIL = variables['default_from_email']

View File

@ -186,7 +186,9 @@ def test_emails_view(app, admin_user, dns_resolver, smtp_server, settings):
resp.form['default_from_email'] = 'john.doe@example.com'
resp.form['email_signature'] = 'my signature'
resp.form['global_email_prefix'] = 'my prefix'
resp.form['email_sender_name'] = 'my name'
resp = resp.form.submit()
assert Variable.objects.filter(name='default_from_email')[0].value == 'john.doe@example.com'
assert Variable.objects.filter(name='email_signature')[0].value == 'my signature'
assert Variable.objects.filter(name='global_email_prefix')[0].value == 'my prefix'
assert Variable.objects.filter(name='email_sender_name')[0].value == 'my name'

View File

@ -7,7 +7,7 @@ from django.conf import UserSettingsHolder
from hobo.deploy.utils import get_hobo_json
from hobo.environment.models import Authentic, Combo
from hobo.multitenant.settings_loaders import Authentic as AuthenticLoader
from hobo.multitenant.settings_loaders import BackofficeLoginHint
from hobo.multitenant.settings_loaders import BackofficeLoginHint, TemplateVars
from hobo.profile.models import AttributeDefinition
pytestmark = pytest.mark.django_db
@ -98,3 +98,35 @@ def test_mellon_always_backoffice_login_hint_setting_from_path(tmpdir):
loader = BackofficeLoginHint()
loader.update_settings_from_path(tenant_settings, path)
assert tenant_settings.MELLON_LOGIN_HINTS == ['always_backoffice']
def test_email_update_settings_from_path(tmpdir):
tenant_settings = UserSettingsHolder({})
loader = TemplateVars()
def update_settings(env):
path = os.path.join(str(tmpdir), 'hobo.json')
json.dump(env, open(path, 'w'))
loader.update_settings_from_path(tenant_settings, path)
tenant_settings.DEFAULT_FROM_EMAIL = 'webmaster@hobo.example.org'
env = {'services': [], 'variables': {}}
update_settings(env)
assert tenant_settings.DEFAULT_FROM_EMAIL == 'webmaster@hobo.example.org'
env['variables']['default_from_email'] = 'john.doe@example.com'
update_settings(env)
assert tenant_settings.DEFAULT_FROM_EMAIL == 'john.doe@example.com'
env['variables']['global_title'] = 'Publik'
update_settings(env)
assert tenant_settings.DEFAULT_FROM_EMAIL == '"Publik" <john.doe@example.com>'
env['variables']['email_sender_name'] = 'Jhon Doe'
update_settings(env)
assert tenant_settings.DEFAULT_FROM_EMAIL == '"Jhon Doe" <john.doe@example.com>'
env['variables']['default_from_email'] = 'foo@example.com'
update_settings(env)
assert tenant_settings.DEFAULT_FROM_EMAIL == '"Jhon Doe" <foo@example.com>'
# default_from_email needed for '"foo" <bar.example.com>' address format
tenant_settings.DEFAULT_FROM_EMAIL = '<webmaster@hobo.example.org>'
update_settings({'services': [], 'variables': {'global_title': 'Publik'}})
assert tenant_settings.DEFAULT_FROM_EMAIL == '<webmaster@hobo.example.org>'