1.9 KiB
1.9 KiB
邮件模板
NyaHome 希望发送 HTML 邮件,但是用于邮件的 HTML 在 2026 年依然是重灾区。因此,NyaHome 决定采用 mjml 配合 Jinja2 制作并渲染邮件模板。
有关工作流程
项目根目录下的 mjml 内是 mjml 源文件。这是一种类 xaml 格式的文件,采用独特的语法像编写 HTML 一样编写用于邮件的……也是
HTML。
通过以下命令,这些 mjml 源文件将会被编译为 j2 源文件,也就是 Jinja2 的模板文件。
pnpm mjml mjml/filename.mjml -o public/templates/filename.j2
NyaHome 的开发状况稳定之后,可能会再优化邮件模板的编译流程。
Jinja2 在 NyaHome 进程中读取模板,渲染变量,然后由 aiosmptplib 发送渲染好的 HTML 邮件。
在 PyCharm 中预览 mjml 源文件
使用 MJML Support 插件以支持 mjml 源文件的语法高亮、智能补全和实时预览。
:::warning MJML Support 插件不支持 JetBrains 远程开发。在远程开发(包括使用 Gateway 进行 WSL 开发)中,IDE client 无法对 mjml 源文件进行实时预览。
MJML Support 的开发者表示该插件不会支持远程开发。 :::
渲染变量
Jinja2 负责将需要动态渲染的变量渲染到经过变异的 Jinja2 模板中。如果你碰过 Django 或者 Flask,应该会对这种格式很熟悉。
<tr>
<td align="left" style="font-size:0px;padding:10px 25px;word-break:break-word;">
<div style="font-family:Maple Mono CN;font-size:13px;line-height:1;text-align:left;color:#000000;">{{ site_name }} 的管理员选择向此邮箱发送了一封测试邮件。此邮件不含有任何有效内容。</div>
</td>
</tr>
本文档不过多设计 Jinja2 的模板变量写法。只需要知道,这些变量会在发送前被填入具体的内容。例如,{{ site_name }}
会被渲染成 config_manager.get("site_name", "Nya Home")。