Email / SMTP notification channel #80

Closed
opened 2026-07-18 05:31:41 +00:00 by claude-bot · 1 comment
Contributor

The one universal channel that's absent: you have chat, push, SMS, and webhooks, but not plain email — the lowest-friction way to loop in a non-technical household member or an archival inbox. Drops cleanly into the one-file-per-notifier pattern (confirmed: no smtp/mailer code exists — the only email references are the OIDC user-email claim). Missed because the owner lives in Discord/Matrix/push. Effort S, value High.


Filed from the 2026-07-17 codebase audit (docs/.internal/report-2026-07-17.md), finding I-10.

The one universal channel that's absent: you have chat, push, SMS, and webhooks, but not plain email — the lowest-friction way to loop in a non-technical household member or an archival inbox. Drops cleanly into the one-file-per-notifier pattern (confirmed: no `smtp`/mailer code exists — the only `email` references are the OIDC user-email claim). Missed because the owner lives in Discord/Matrix/push. Effort S, value High. --- _Filed from the 2026-07-17 codebase audit (`docs/.internal/report-2026-07-17.md`), finding I-10._
Author
Contributor

Done in #101 (merged). New email channel type (migration 0021, ALTER TYPE channeltype ADD VALUE) with an SMTP notifier built through the shared formatter, sending via stdlib smtplib offloaded with asyncio.to_thread. SMTP failures classify into the Transient/Permanent DeliveryError taxonomy so the outbox retries them; recipient addresses are redacted for non-managers. EmailConfig validation + a recipients field in the channels UI. Global SMTP_* settings (blank SMTP_HOST disables it).

Done in #101 (merged). New `email` channel type (migration 0021, `ALTER TYPE channeltype ADD VALUE`) with an SMTP notifier built through the shared formatter, sending via stdlib `smtplib` offloaded with `asyncio.to_thread`. SMTP failures classify into the Transient/Permanent `DeliveryError` taxonomy so the outbox retries them; recipient addresses are redacted for non-managers. `EmailConfig` validation + a recipients field in the channels UI. Global `SMTP_*` settings (blank `SMTP_HOST` disables it).
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/WeatherBot#80
No description provided.