Email sending infrastructure (EML01) #39

Closed
opened 2026-04-21 20:52:20 +00:00 by frank · 1 comment
Owner

No email sending capability exists. No mail(), PHPMailer, or SMTP config.\n\nBlocks: password reset (AUTH01), purchase receipts (PAY07).\n\nOptions: PHPMailer + SMTP relay (Mailgun/SES/Postmark), or Resend. Need DKIM/SPF/DMARC on sending domain (EML02).\n\nLaunch readiness: EML01 BLOCKER

No email sending capability exists. No mail(), PHPMailer, or SMTP config.\n\nBlocks: password reset (AUTH01), purchase receipts (PAY07).\n\nOptions: PHPMailer + SMTP relay (Mailgun/SES/Postmark), or Resend. Need DKIM/SPF/DMARC on sending domain (EML02).\n\nLaunch readiness: EML01 BLOCKER
frank added this to the Launch Prep milestone 2026-04-21 20:52:20 +00:00
frank changed title from BLOCKER: Email sending infrastructure (EML01) to Email sending infrastructure (EML01) 2026-05-05 15:30:26 +00:00
Author
Owner

Done in commit c9391e2.

  • New api/services/EmailService.php wraps the Resend API
  • Reads RESEND_API_KEY, EMAIL_FROM, APP_URL from env
  • Fails soft when key is unset (logs + returns false) so self-hosters without SMTP aren't broken
  • Domain cookslate.app verified at Resend (DKIM + SPF + DMARC live in Cloudflare)
  • First production use: forgot-password flow (#35)

Future transactional emails (Stripe receipts, etc.) just new EmailService()->send(...).

Done in commit c9391e2. - New `api/services/EmailService.php` wraps the Resend API - Reads `RESEND_API_KEY`, `EMAIL_FROM`, `APP_URL` from env - Fails soft when key is unset (logs + returns false) so self-hosters without SMTP aren't broken - Domain `cookslate.app` verified at Resend (DKIM + SPF + DMARC live in Cloudflare) - First production use: forgot-password flow (#35) Future transactional emails (Stripe receipts, etc.) just `new EmailService()->send(...)`.
frank closed this issue 2026-05-05 20:38:50 +00:00
Sign in to join this conversation.
No description provided.