✨ Add react-email for email templates (#2421)

This commit is contained in:
Alejandra
2026-08-10 19:59:35 +02:00
committed by GitHub
parent de53c8fd35
commit b0ccf1e80e
26 changed files with 802 additions and 166 deletions
+15 -3
View File
@@ -139,8 +139,20 @@ If you don't want to start with the default models and want to remove them / mod
## Email Templates
The email templates are in `./backend/app/email-templates/`. Here, there are two directories: `build` and `src`. The `src` directory contains the source files that are used to build the final email templates. The `build` directory contains the final email templates that are used by the application.
The email templates are written with [React Email](https://react.email) in `./packages/react-email/`. The `emails` directory holds one component per email and the `ui` directory holds the shared components (layout, heading, button, link, callout).
Before continuing, ensure you have the [MJML extension](https://github.com/mjmlio/vscode-mjml) installed in your VS Code.
The rendered HTML in `./backend/app/email-templates/` is generated from those components, it is what the application sends, and it shouldn't be edited by hand.
Once you have the MJML extension installed, you can create a new email template in the `src` directory. After creating the new email template and with the `.mjml` file open in your editor, open the command palette with `Ctrl+Shift+P` and search for `MJML: Export to HTML`. This will convert the `.mjml` file to a `.html` file and now you can save it in the build directory.
To preview the emails while editing them, start the dev server from the root of the project:
```console
$ bun run email:dev
```
Values coming from the backend are declared as Jinja placeholders in the component props, for example `username = "{{ username }}"`. The context for each email is built in `generate_*_email()` in `./backend/app/utils.py`, so a new placeholder needs to be added there too.
Once you are done, regenerate the templates used by the application:
```console
$ bun run email:export
```