From b80ae7c8c3f5f23f01b0a68ca1a4043fc21ab7d9 Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Wed, 25 Feb 2026 00:26:41 -0800 Subject: [PATCH] chore: update task-6 notes and create task-11 for SMTP migration Co-Authored-By: Claude Opus 4.6 --- ...ll-SMTP-references-to-mail.rmail.online.md | 29 +++++++++++++++++++ .../task-6 - Add-order-confirmation-emails.md | 2 ++ 2 files changed, 31 insertions(+) create mode 100644 backlog/tasks/task-11 - Migrate-all-SMTP-references-to-mail.rmail.online.md diff --git a/backlog/tasks/task-11 - Migrate-all-SMTP-references-to-mail.rmail.online.md b/backlog/tasks/task-11 - Migrate-all-SMTP-references-to-mail.rmail.online.md new file mode 100644 index 0000000..c60a170 --- /dev/null +++ b/backlog/tasks/task-11 - Migrate-all-SMTP-references-to-mail.rmail.online.md @@ -0,0 +1,29 @@ +--- +id: TASK-11 +title: Migrate all SMTP references to mail.rmail.online +status: Done +assignee: [] +created_date: '2026-02-25 08:00' +updated_date: '2026-02-25 08:25' +labels: [infrastructure, email] +dependencies: [TASK-6] +priority: medium +--- + +## Description + + +Replace all references to mx.jeffemmett.com with mail.rmail.online across all repositories. Set up rswag.online domain in Mailcow with noreply@ mailbox, DNS records, and SMTP credentials wired into rSwag backend via Infisical. + + +## Implementation Notes + + +Cross-repo cleanup: Updated 10 backlog/doc files across 6 repos (rinbox-online, rmail-online, dev-ops, payment-infra, cadcad-discourse-forum, configuration dotfiles). Updated live CLAUDE.md. Only 2 intentional references remain (ADDITIONAL_SAN backward compat in task-11 migration notes). + +Mailcow setup: Created rswag.online domain (2048-bit DKIM), noreply@rswag.online mailbox. Cloudflare DNS: MX (mail.rmail.online, priority 10), SPF (v=spf1 ip4:159.195.32.209 ~all), DKIM (dkim._domainkey), DMARC (p=quarantine). + +Infisical wiring: Stored RSWAG_SMTP_HOST, RSWAG_SMTP_USER, RSWAG_SMTP_PASSWORD in claude-ops /mail folder. Added rswag-container identity as viewer on claude-ops project. Entrypoint.sh fetches SMTP config from claude-ops at startup, overriding stale values from .env and rSwag Infisical project. config.py AliasChoices accepts both SMTP_PASSWORD and SMTP_PASS. + +Deploy: Triggered via webhook with correct HMAC secret. Container logs confirm: "[infisical] Loaded SMTP config from claude-ops/mail". + diff --git a/backlog/tasks/task-6 - Add-order-confirmation-emails.md b/backlog/tasks/task-6 - Add-order-confirmation-emails.md index 3e9dc3a..ba58a5b 100644 --- a/backlog/tasks/task-6 - Add-order-confirmation-emails.md +++ b/backlog/tasks/task-6 - Add-order-confirmation-emails.md @@ -20,4 +20,6 @@ OrderService has TODO for sending confirmation emails after payment. Connect to EmailService created with aiosmtplib. Order confirmation email sent after successful Mollie payment. Shipping notification email sent when POD provider reports shipped status with tracking info. HTML templates with rSwag dark theme branding. SMTP via Mailcow (mail.rmail.online:587 STARTTLS). Non-blocking: failures logged but don't break order flow. + +Mailcow setup (2026-02-25): Created rswag.online domain with 2048-bit DKIM. Created noreply@rswag.online mailbox. DNS records (MX, SPF, DKIM, DMARC) added to Cloudflare. SMTP credentials stored in claude-ops /mail folder (RSWAG_SMTP_HOST, RSWAG_SMTP_USER, RSWAG_SMTP_PASSWORD). Entrypoint fetches from claude-ops at startup, overriding stale rSwag Infisical values. config.py uses AliasChoices to accept both SMTP_PASSWORD and SMTP_PASS env var names.