Skip to content

Forward inbound SMS alerts through Resend, not Mailgun - #266

Merged
ralyodio merged 1 commit into
masterfrom
sms-alerts-via-resend
Oct 2, 2026
Merged

ralyodio merged 1 commit into
masterfrom
sms-alerts-via-resend

Conversation

@ralyodio

@ralyodio ralyodio commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

Mailgun is being shut off: the account's charge was declined, and the fleet already sends through Resend. qrypt's own Supabase auth sends through smtp.resend.com too. This was the app's last Mailgun sender: the Telnyx inbound-SMS webhook emails each message (OTP codes) to otp@qrypt.chat.

  • SMSAlertEmailService replaces MailgunEmailService. It has the same interface (sendEmail, sendSMSWebhookAlert, formatter, createSMSWebhookEmailService) and POSTs to api.resend.com/emails. RESEND_API_KEY replaces MAILGUN_API_KEY/MAILGUN_DOMAIN; FROM_EMAIL (hello@qrypt.chat) and OTP_TO_EMAIL are unchanged.
  • qrypt.chat is now a Resend domain. It was added through the API, and its DKIM/SPF records on resend._domainkey and send./rsend. are in Porkbun. The apex MX stays on Forward Email.
  • mailgun.js and form-data are removed. The old Mailgun unit test and two integration tests (one quarantined) are replaced by tests/sms-alert-email-service.test.js: payload shape, bearer auth, Resend refusal → failure result, OTP forwarding, no key → disabled.
  • .env.example and scripts/supabase-email.sh now default to Resend SMTP.

Tests: 553/553 across 88 files.

🤖 Generated with Claude Code

Mailgun is being shut off (its charge was declined; the fleet sends
through Resend, and qrypt's own Supabase auth already does). This was the
app's last Mailgun sender.

- SMSAlertEmailService (src/lib/services/sms-alert-email-service.js)
  replaces MailgunEmailService: same sendEmail / sendSMSWebhookAlert /
  formatter interface, POSTs to api.resend.com, injectable fetch for tests.
  Configured from RESEND_API_KEY; FROM_EMAIL / OTP_TO_EMAIL unchanged.
- Drops mailgun.js and form-data; the Mailgun unit test and both
  integration tests (one was quarantined) are replaced by
  tests/sms-alert-email-service.test.js.
- .env.example and scripts/supabase-email.sh default to smtp.resend.com.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown

ThreatCrush Security Scan

13 finding(s)

MEDIUM: 9 | LOW: 4

Severity Rule Location
MEDIUM redos-nested-quantifier src/app/api/profile/update/route.js:73
MEDIUM js-unescaped-html-sink src/app/blog/[slug]/page.jsx:38
MEDIUM js-unescaped-html-sink src/app/blog/[slug]/page.jsx:66
MEDIUM js-unescaped-html-sink src/app/faq/page.jsx:57
MEDIUM js-unescaped-html-sink src/app/layout.jsx:137
MEDIUM js-unescaped-html-sink src/app/layout.jsx:141
MEDIUM js-unescaped-html-sink src/app/page.jsx:47
MEDIUM redos-nested-quantifier src/lib/auth/dns-name.js:88
MEDIUM js-unescaped-html-sink src/lib/components/chat/MessageItem.jsx:60
LOW secret-generic-credential src/app/api/auth/register-anon/route.test.js:32
LOW secret-jwt tests/debug-sms.js:10
LOW secret-generic-credential tests/private-key-import-export.test.js:252
LOW secret-generic-credential tests/private-key-import-export.test.js:264

Snippets are redacted; ThreatCrush never prints matched credential material.

@ralyodio
ralyodio merged commit 83a9178 into master Oct 2, 2026
11 checks passed
@ralyodio
ralyodio deleted the sms-alerts-via-resend branch October 2, 2026 02:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant