Actions
Sub-Task #195
openEpic #188: Notification System
Feature #189: Email Notifications
User Story #193: As a system, I want to send emails on long-term events, so that users receive batch digests
Integrate SMTP provider
Sub-Task #195:
Integrate SMTP provider
Start date:
09/07/2026
Due date:
% Done:
100%
Estimated time:
Description
The instance sends transactional emails (verification, password reset, notifications). The pipeline has two separate stages:
- Template rendering (see #194): the email body is authored in MJML and compiled to HTML via mrml, a pure-Rust MJML→HTML renderer. mrml only compiles static markup — it has no variable/conditional syntax of its own — so dynamic values (name, verification link, etc.) are injected by running the compiled HTML through Tera on top of it.
- Sending (this issue): the rendered HTML is handed to lettre, a Rust SMTP client crate, which delivers it over SMTP.
Scope of this issue is stage 2 only:
- SMTP connection is configured entirely via environment variables: host, port, credentials, sender address, and encryption/TLS mode.
- If no SMTP environment variables are set, sending is a no-op — callers must treat "no mail configured" as a valid state (e.g. accounts auto-verify at registration when no mail server is available, see #166).
- For local development, a self-hosted mail-catching tool (Mailpit, replacing the now-deprecated MailHog) is provided so anyone can inspect sent emails without a real mailbox, deployed as a k3d manifest in the local dev environment.
Updated by Bricklou 18 days ago
- Blocks Sub-Task #166: Send invitation email with token added
Updated by Anonymous 18 days ago
Commit referenced this issue: @4ef1bf7d@
https://codeberg.org/Bricklou/kubestro/commit/4ef1bf7dad1900297a8d532ea0e37d286fbf6313
feat: implement mail sending capability to the server api (#195)
Updated by Anonymous 18 days ago
Commit referenced this issue: @4ef1bf7d@
https://codeberg.org/Bricklou/kubestro/commit/4ef1bf7dad1900297a8d532ea0e37d286fbf6313
feat: implement mail sending capability to the server api (#195)
Actions