- {% blocktrans with username=user.username %}
- Hi {{ username }},
- {% endblocktrans %}
-
+
+
+ {% blocktrans with username=user.username %}
+ Hi {{ username }},
+ {% endblocktrans %}
+
+
-
-
-
-
- {% blocktrans %}
- You recently requested to change your password for your authentik account. Use the button below to set a new password.
- {% endblocktrans %}
-
- {% blocktrans with expires=expires|naturaltime %}
- If you did not request a password change, please ignore this Email. The link above is valid for {{ expires }}.
- {% endblocktrans %}
-
-
-
-
+
+
+
+
+ {% blocktrans %}
+ You recently requested to change your password for your authentik account. Use the button below to set a new password.
+ {% endblocktrans %}
+
+ {% blocktrans with expires=expires|naturaltime %}
+ If you did not request a password change, please ignore this Email. The link above is valid for {{ expires }}.
+ {% endblocktrans %}
+
{% endblock %}
diff --git a/authentik/stages/email/utils.py b/authentik/stages/email/utils.py
index 13650ec4b..5422ec43a 100644
--- a/authentik/stages/email/utils.py
+++ b/authentik/stages/email/utils.py
@@ -1,9 +1,21 @@
"""email utils"""
+from email.mime.image import MIMEImage
+from functools import lru_cache
+
from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from django.utils import translation
+@lru_cache()
+def logo_data():
+ """Get logo as MIME Image for emails"""
+ with open("web/icons/icon_left_brand.png", "rb") as _logo_file:
+ logo = MIMEImage(_logo_file.read())
+ logo.add_header("Content-ID", "logo.png")
+ return logo
+
+
class TemplateEmailMessage(EmailMultiAlternatives):
"""Wrapper around EmailMultiAlternatives with integrated template rendering"""
@@ -12,4 +24,6 @@ class TemplateEmailMessage(EmailMultiAlternatives):
html_content = render_to_string(template_name, template_context)
super().__init__(**kwargs)
self.content_subtype = "html"
+ self.mixed_subtype = "related"
+ self.attach(logo_data())
self.attach_alternative(html_content, "text/html")
diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po
index db2b66eb5..b3f311e51 100644
--- a/locale/en/LC_MESSAGES/django.po
+++ b/locale/en/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-09-15 09:51+0000\n"
+"POT-Creation-Date: 2023-10-02 12:46+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -375,63 +375,63 @@ msgstr ""
msgid "Event user"
msgstr ""
-#: authentik/events/models.py:484
+#: authentik/events/models.py:491
msgid "Notification Transport"
msgstr ""
-#: authentik/events/models.py:485
+#: authentik/events/models.py:492
msgid "Notification Transports"
msgstr ""
-#: authentik/events/models.py:491
+#: authentik/events/models.py:498
msgid "Notice"
msgstr ""
-#: authentik/events/models.py:492
+#: authentik/events/models.py:499
msgid "Warning"
msgstr ""
-#: authentik/events/models.py:493
+#: authentik/events/models.py:500
msgid "Alert"
msgstr ""
-#: authentik/events/models.py:518
+#: authentik/events/models.py:525
msgid "Notification"
msgstr ""
-#: authentik/events/models.py:519
+#: authentik/events/models.py:526
msgid "Notifications"
msgstr ""
-#: authentik/events/models.py:529
+#: authentik/events/models.py:536
msgid ""
"Select which transports should be used to notify the user. If none are "
"selected, the notification will only be shown in the authentik UI."
msgstr ""
-#: authentik/events/models.py:537
+#: authentik/events/models.py:544
msgid "Controls which severity level the created notifications will have."
msgstr ""
-#: authentik/events/models.py:542
+#: authentik/events/models.py:549
msgid ""
"Define which group of users this notification should be sent and shown to. "
"If left empty, Notification won't ben sent."
msgstr ""
-#: authentik/events/models.py:560
+#: authentik/events/models.py:567
msgid "Notification Rule"
msgstr ""
-#: authentik/events/models.py:561
+#: authentik/events/models.py:568
msgid "Notification Rules"
msgstr ""
-#: authentik/events/models.py:581
+#: authentik/events/models.py:588
msgid "Webhook Mapping"
msgstr ""
-#: authentik/events/models.py:582
+#: authentik/events/models.py:589
msgid "Webhook Mappings"
msgstr ""
@@ -2099,21 +2099,21 @@ msgstr ""
msgid "Email sent."
msgstr ""
-#: authentik/stages/email/templates/email/account_confirmation.html:9
+#: authentik/stages/email/templates/email/account_confirmation.html:10
msgid "Welcome!"
msgstr ""
-#: authentik/stages/email/templates/email/account_confirmation.html:12
+#: authentik/stages/email/templates/email/account_confirmation.html:19
msgid ""
"We're excited to have you get started. First, you need to confirm your "
"account. Just press the button below."
msgstr ""
-#: authentik/stages/email/templates/email/account_confirmation.html:21
+#: authentik/stages/email/templates/email/account_confirmation.html:24
msgid "Confirm Account"
msgstr ""
-#: authentik/stages/email/templates/email/account_confirmation.html:30
+#: authentik/stages/email/templates/email/account_confirmation.html:36
#, python-format
msgid ""
"\n"
@@ -2122,43 +2122,42 @@ msgid ""
" "
msgstr ""
-#: authentik/stages/email/templates/email/account_confirmation.html:35
-msgid ""
-"If you have any questions, just reply to this email—we're always happy to "
-"help out."
-msgstr ""
-
-#: authentik/stages/email/templates/email/generic.html:24
-msgid "Additional Information"
-msgstr ""
-
-#: authentik/stages/email/templates/email/password_reset.html:9
+#: authentik/stages/email/templates/email/event_notification.html:46
#, python-format
msgid ""
"\n"
-" Hi %(username)s,\n"
-" "
+" This email was sent from the notification transport %(name)s"
+"code>.\n"
+" "
msgstr ""
-#: authentik/stages/email/templates/email/password_reset.html:19
+#: authentik/stages/email/templates/email/password_reset.html:10
+#, python-format
msgid ""
"\n"
-" You recently requested to change your password for your "
-"authentik account. Use the button below to set a new password.\n"
-" "
+" Hi %(username)s,\n"
+" "
msgstr ""
-#: authentik/stages/email/templates/email/password_reset.html:33
+#: authentik/stages/email/templates/email/password_reset.html:21
+msgid ""
+"\n"
+" You recently requested to change your password for your authentik "
+"account. Use the button below to set a new password.\n"
+" "
+msgstr ""
+
+#: authentik/stages/email/templates/email/password_reset.html:28
msgid "Reset Password"
msgstr ""
-#: authentik/stages/email/templates/email/password_reset.html:45
+#: authentik/stages/email/templates/email/password_reset.html:39
#, python-format
msgid ""
"\n"
-" If you did not request a password change, please ignore "
-"this Email. The link above is valid for %(expires)s.\n"
-" "
+" If you did not request a password change, please ignore this Email. The "
+"link above is valid for %(expires)s.\n"
+" "
msgstr ""
#: authentik/stages/email/templates/email/setup.html:9
diff --git a/web/xliff/fr.xlf b/web/xliff/fr.xlf
index e16d3ef3e..00909b58a 100644
--- a/web/xliff/fr.xlf
+++ b/web/xliff/fr.xlf
@@ -1,4 +1,4 @@
-
+
@@ -613,9 +613,9 @@ Il y a jour(s)
-
- L'URL "
- " n'a pas été trouvée.
+
+ L'URL "
+ " n'a pas été trouvée.
@@ -1067,8 +1067,8 @@ Il y a jour(s)
-
- Pour permettre n'importe quelle URI de redirection, définissez cette valeur sur ".*". Soyez conscient des possibles implications de sécurité que cela peut avoir.
+
+ Pour permettre n'importe quelle URI de redirection, définissez cette valeur sur ".*". Soyez conscient des possibles implications de sécurité que cela peut avoir.
@@ -1298,7 +1298,7 @@ Il y a jour(s)
- Utilisez ce fournisseur avec l'option "auth_request" de Nginx ou "forwardAuth" de Traefik. Chaque application/domaine a besoin de son propre fournisseur. De plus, sur chaque domaine, "/outpost.goauthentik.io" doit être routé vers le poste avancé (lorsque vous utilisez un poste avancé géré, cela est fait pour vous).
+ Utilisez ce fournisseur avec l'option "auth_request" de Nginx ou "forwardAuth" de Traefik. Chaque application/domaine a besoin de son propre fournisseur. De plus, sur chaque domaine, "/outpost.goauthentik.io" doit être routé vers le poste avancé (lorsque vous utilisez un poste avancé géré, cela est fait pour vous).
@@ -1645,7 +1645,7 @@ Il y a jour(s)
- Jeton d'authentification à utiliser. Actuellement, seule l'authentification "bearer authentication" est prise en charge.
+ Jeton d'authentification à utiliser. Actuellement, seule l'authentification "bearer authentication" est prise en charge.
@@ -1813,8 +1813,8 @@ Il y a jour(s)
-
- Entrez une URL complète, un chemin relatif ou utilisez 'fa://fa-test' pour utiliser l'icône Font Awesome "fa-test".
+
+ Entrez une URL complète, un chemin relatif ou utilisez 'fa://fa-test' pour utiliser l'icône Font Awesome "fa-test".
@@ -3147,7 +3147,7 @@ doesn't pass when either or both of the selected options are equal or above the
- Pour utiliser SSL à la base, utilisez "ldaps://" et désactviez cette option.
+ Pour utiliser SSL à la base, utilisez "ldaps://" et désactviez cette option.
@@ -3236,8 +3236,8 @@ doesn't pass when either or both of the selected options are equal or above the
-
- Champ qui contient les membres d'un groupe. Si vous utilisez le champ "memberUid", la valeur est censée contenir un nom distinctif relatif, par exemple 'memberUid=un-utilisateur' au lieu de 'memberUid=cn=un-utilisateur,ou=groups,...'
+
+ Champ qui contient les membres d'un groupe. Si vous utilisez le champ "memberUid", la valeur est censée contenir un nom distinctif relatif, par exemple 'memberUid=un-utilisateur' au lieu de 'memberUid=cn=un-utilisateur,ou=groups,...'
@@ -3532,7 +3532,7 @@ doesn't pass when either or both of the selected options are equal or above the
- Moment où les utilisateurs temporaires doivent être supprimés. Cela ne s'applique que si votre IDP utilise le format NameID "transient" et que l'utilisateur ne se déconnecte pas manuellement.
+ Moment où les utilisateurs temporaires doivent être supprimés. Cela ne s'applique que si votre IDP utilise le format NameID "transient" et que l'utilisateur ne se déconnecte pas manuellement.
@@ -3700,7 +3700,7 @@ doesn't pass when either or both of the selected options are equal or above the
- Indiquer la valeur "FriendlyName" de l'attribut d'assertion (optionnel)
+ Indiquer la valeur "FriendlyName" de l'attribut d'assertion (optionnel)
@@ -4029,8 +4029,8 @@ doesn't pass when either or both of the selected options are equal or above the
-
- En cas d'utilisation d'une solution de journalisation externe pour l'archivage, cette valeur peut être fixée à "minutes=5".
+
+ En cas d'utilisation d'une solution de journalisation externe pour l'archivage, cette valeur peut être fixée à "minutes=5".
@@ -4039,8 +4039,8 @@ doesn't pass when either or both of the selected options are equal or above the
-
- Format : "weeks=3;days=2;hours=3,seconds=2".
+
+ Format : "weeks=3;days=2;hours=3,seconds=2".
@@ -4236,10 +4236,10 @@ doesn't pass when either or both of the selected options are equal or above the
-
+
Êtes-vous sûr de vouloir mettre à jour
- "
- " ?
+ "
+ " ?
@@ -5340,8 +5340,8 @@ doesn't pass when either or both of the selected options are equal or above the
-
- Un authentificateur "itinérant", comme une YubiKey
+
+ Un authentificateur "itinérant", comme une YubiKey
@@ -5666,7 +5666,7 @@ doesn't pass when either or both of the selected options are equal or above the
- Afficher des champs de saisie arbitraires à l'utilisateur, par exemple pendant l'inscription. Les données sont enregistrées dans le contexte du flux sous la variable "prompt_data".
+ Afficher des champs de saisie arbitraires à l'utilisateur, par exemple pendant l'inscription. Les données sont enregistrées dans le contexte du flux sous la variable "prompt_data".
@@ -5675,10 +5675,10 @@ doesn't pass when either or both of the selected options are equal or above the
-
+
- ("
- ", de type
+ ("
+ ", de type
)
@@ -5727,8 +5727,8 @@ doesn't pass when either or both of the selected options are equal or above the
-
- Si défini à une durée supérieure à 0, l'utilisateur aura la possibilité de choisir de "rester connecté", ce qui prolongera sa session jusqu'à la durée spécifiée ici.
+
+ Si défini à une durée supérieure à 0, l'utilisateur aura la possibilité de choisir de "rester connecté", ce qui prolongera sa session jusqu'à la durée spécifiée ici.
@@ -6512,7 +6512,7 @@ Les liaisons avec les groupes/utilisateurs sont vérifiées par rapport à l'uti
- Peut être au format "unix://" pour une connexion à un service docker local, "ssh://" pour une connexion via SSH, ou "https://:2376" pour une connexion à un système distant.
+ Peut être au format "unix://" pour une connexion à un service docker local, "ssh://" pour une connexion via SSH, ou "https://:2376" pour une connexion à un système distant.
@@ -7819,4 +7819,4 @@ Les liaisons avec les groupes/utilisateurs sont vérifiées par rapport à l'uti
-
\ No newline at end of file
+
diff --git a/web/xliff/zh-Hans.xlf b/web/xliff/zh-Hans.xlf
index 1d2ff7720..a760ca993 100644
--- a/web/xliff/zh-Hans.xlf
+++ b/web/xliff/zh-Hans.xlf
@@ -1,4 +1,4 @@
-
+
@@ -613,9 +613,9 @@
-
- 未找到 URL "
- "。
+
+ 未找到 URL "
+ "。
@@ -1067,8 +1067,8 @@
-
- 要允许任何重定向 URI,请将此值设置为 ".*"。请注意这可能带来的安全影响。
+
+ 要允许任何重定向 URI,请将此值设置为 ".*"。请注意这可能带来的安全影响。
@@ -1814,8 +1814,8 @@
-
- 输入完整 URL、相对路径,或者使用 'fa://fa-test' 来使用 Font Awesome 图标 "fa-test"。
+
+ 输入完整 URL、相对路径,或者使用 'fa://fa-test' 来使用 Font Awesome 图标 "fa-test"。
@@ -3238,8 +3238,8 @@ doesn't pass when either or both of the selected options are equal or above the
-
- 包含组成员的字段。请注意,如果使用 "memberUid" 字段,则假定该值包含相对可分辨名称。例如,'memberUid=some-user' 而不是 'memberUid=cn=some-user,ou=groups,...'
+
+ 包含组成员的字段。请注意,如果使用 "memberUid" 字段,则假定该值包含相对可分辨名称。例如,'memberUid=some-user' 而不是 'memberUid=cn=some-user,ou=groups,...'
@@ -4031,8 +4031,8 @@ doesn't pass when either or both of the selected options are equal or above the
-
- 使用外部日志记录解决方案进行存档时,可以将其设置为 "minutes=5"。
+
+ 使用外部日志记录解决方案进行存档时,可以将其设置为 "minutes=5"。
@@ -4041,8 +4041,8 @@ doesn't pass when either or both of the selected options are equal or above the
-
- 格式:"weeks=3;days=2;hours=3,seconds=2"。
+
+ 格式:"weeks=3;days=2;hours=3,seconds=2"。
@@ -4238,10 +4238,10 @@ doesn't pass when either or both of the selected options are equal or above the
-
+
您确定要更新
- "
- " 吗?
+ "
+ " 吗?
@@ -5342,7 +5342,7 @@ doesn't pass when either or both of the selected options are equal or above the
-
+
像 YubiKey 这样的“漫游”身份验证器
@@ -5677,10 +5677,10 @@ doesn't pass when either or both of the selected options are equal or above the
-
+
- ("
- ",类型为
+ ("
+ ",类型为
)
@@ -5729,7 +5729,7 @@ doesn't pass when either or both of the selected options are equal or above the
-
+
如果设置时长大于 0,用户可以选择“保持登录”选项,这将使用户的会话延长此处设置的时间。
@@ -7821,4 +7821,4 @@ Bindings to groups/users are checked against the user of the event.
-
\ No newline at end of file
+