摘要
本文介绍了如何通过修改模版的方案自定义Authentik发送的各种邮件的内容与样式
前言
Authentik作为一个统一身份管理系统,在其日常的运行中,不可避免的需要向用户发送一些邮件(用户有时候需要通过邮箱来找回密码、接收2FA信息)。但是Authentik默认发送的邮件样式有些不美观,在部分邮箱客户端上面显示的邮件还有些不协调(如图1所示),并且我们也有自定义邮件通知内容以及图标样式等的需求。
所以这篇文章,我将会来介绍下如何对Authentik推送的邮件样式进行修改。本文适用于使用Docker Compose部署的Authentik实例,但是采用其他方案部署的实例也可以参考本文章的部分内容。

大体思路
Authentik的后端是基于Django进行开发的,其使用了Django的模版语言来渲染部分页面[1]。而Authentik发送的邮件,也是基于模版生成的。所以我们需要自己设计一个邮件模版,然后让Authentik基于这个模版生成邮件发送给用户,即可达成自定义推送邮件的样式以及内容。
具体操作
准备自己的模版
首先,我们的邮件模版肯定要能接入变量,否则无法动态显示用户所需要的信息。Authentik邮件常用的变量如表1所示
| 变量名 | 变量含义 |
| {{ url }} | 发送给用户的链接(比如说重置密码 / 验证邮箱的链接) |
| {{ user.username }} | 触发此邮件操作的用户名 |
| {{ user.email }} | 触发此邮件操作的用户邮箱 |
| {{ expires }} | 邮件中的链接有效期 |
根据上述的变量,我们先写一个简单的html模版出来。
{% load i18n %}
{% load humanize %}
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>重置密码</title>
</head>
<body>
<p>{{ user.username }},您好:</p>
<p>您正在请求重置您的账号密码。</p>
<p>请打开下面的链接重置密码:</p>
<p><a href="{{ url }}">{{ url }}</a></p>
<p>如果不是您本人操作,请忽略此邮件。</p>
<p>该链接将在 {{ expires|naturaltime }} 失效。</p>
<p>此致,敬礼</p>
</body>
</html>
当然,自从Authentik 2024.2版本之后,Authentik支持发送同时包含txt与html内容的Multipart邮件[2]。
如果想要发送Multipart邮件的话,只需再配置一个txt文件版本的模版,与html版本的文件名一致,但是文件扩展名为txt。txt版本的模版跟html版本的大部分变量都是相同的。我下面也给一个例子
{% load humanize %}
{{ user.username }},您好:
您正在请求重置您的账号密码。
请打开下面的链接重置密码:
{{ url }}
如果不是您本人操作,请忽略此邮件。
该链接将在 {{ expires|naturaltime }} 失效。
此致,敬礼
将您设计的两个文件分别准备好,并设置好文件名,比如说html版本叫做password_reset.html,然后txt版本叫做password_reset.txt。txt 版本的邮件不是必须的,可以只准备html版本。
将模版挂载到Authentik容器里
默认情况下,使用Authentik官方的compose.yml文件部署的实例默认会挂载compose.yml同级目录中的custom-templates目录到内部的模版目录中。
所以,我们找到当时启动Authentik的目录(即compose.yml所在的目录),找到custom-templates文件夹(如果没有这个目录,请手动创建),如图2所示,然后将刚刚我们准备的两个模版文件(password_reset.txt与password_reset.html)拷贝到这个目录中。

编辑邮件发送阶段
将模版放置到文件夹内后,我们还要前往Authentik的管理员设置中进行一些设置。
首先前往管理员界面,在左侧栏目中,找到流程与阶段选项,点击其中的阶段,在阶段列表中找到一个类型为Email Stage的阶段(比如说我们这里的找回密码邮件发送阶段)[3],点击右侧的编辑按钮。如图3所示

在新弹出来的阶段编辑界面中,可以展开位于底部的“阶段特定设置选项”,其中有一个模版设置项,如图4所示。点开设置项会弹出一个下拉单选列表,可以看到我们刚刚上传的模版,选中您需要的模版即可。

选中后点击最底部更新按钮,完成邮件模版设置
测试修改后效果
我们触发一次邮件发送,可以看到邮件样式以及内容均是我们刚刚导入的模版的了,如图5所示。

查看邮件原文,可以看到邮件中包含txt以及html两个版本的邮件的内容,如图6所示。
