bb81cd414a
calcom + nextcloud both send live via the :2526 plaintext listener (calcom signup = Nodemailer; nextcloud password-reset = Symfony Mailer), both From <app>@felhom.eu. calcom healthcheck: wget GET not --spider (HEAD 405s). CHANGELOG + REPORT. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2.8 KiB
2.8 KiB
REPORT — App-email gap closure: calcom + nextcloud wired (plaintext :2526 + split-From)
Date: 2026-06-29
Task: Wire cal.com + nextcloud now that the controller (v0.89.0) has the :2526 plaintext-only listener
(Gap 1) and tls_mode/from_domain_var mapping fields (Gap 2). Catalog-only; live send-tests.
Mappings added
- nextcloud (
tls_mode: plaintext, split From):host_var=SMTP_HOST,port_var=SMTP_PORT,from_var=MAIL_FROM_ADDRESS,from_domain_var=MAIL_DOMAIN,from_local=nextcloud; nosecurity_var(SMTP_SECUREstays empty = no TLS). Compose references the injected${SMTP_*}+${MAIL_*}. Live send confirmed: real password-reset → Symfony Mailer plaintext to :2526 (no STARTTLS) → hub → Resend, Fromnextcloud@felhom.eu(split From), shimhub=200. nextcloud applied the env on redeploy (occshowsmail_smtpport=2526,mail_from_address=nextcloud,mail_domain=felhom.eu) — every-bootgetenv, no occ step needed (§8). - cal.com (
tls_mode: plaintext):host_var=EMAIL_SERVER_HOST,port_var=EMAIL_SERVER_PORT,from_var=EMAIL_FROM,from_name_var=EMAIL_FROM_NAME,from_local=calcom; secure inferred from the port (2526 → plaintext). Compose references the injected${EMAIL_*}. Injected env verified in-container (EMAIL_SERVER_PORT=2526,EMAIL_FROM=calcom@felhom.eu). Live send confirmed: a real signup (201 "Created user") → Nodemailer plaintext to :2526 (no STARTTLS) → hub → Resend, Fromcalcom@felhom.eu, shimhub=200.
Pre-existing cal.com template bugs fixed (never caught — bad pin meant calcom never deployed)
- Image pin
calcom/cal.com:v4.8.7doesn't exist as a published image (manifest unknown) →v4.6.9(nearest valid 4.x; sameEMAIL_SERVER_*behaviour). - Missing
DATABASE_DIRECT_URL— cal.com's Prisma schema declaresdirectUrl=env(DATABASE_DIRECT_URL); without itprisma migrate deployfails (P1012) on startup → incomplete schema →/api/health500s. Added (same direct Postgres URL). - Healthcheck path
/api/healthis 404 in v4.x → container stayed unhealthy → Traefik wouldn't route it. Changed to/api/auth/providers(stable 200) in both the docker healthcheck and the.felhom.ymlprobe.
Validation
- All four edited files YAML-validated; field names match the controller's
stacks.SMTPMappingtags. - The
:2526plaintext-no-STARTTLS mechanism is proven end-to-end by the nextcloud real send; cal.com uses the identical mechanism (Nodemailer) with its env verified.
Notes
- immich still unwired by decision (Gap 3 — no SMTP env; needs config-file injection).
- Other email-capable apps (ghost, outline, grafana, …) now wire as
tls_mode: plaintextwith no per-app TLS determination. No secrets in any committed file.