Blog
Page 2 of 2.
12 June 2026 · 4 min read
Custom email for Supabase Auth
Replace Supabase's built-in auth mail with your own sender, either through custom SMTP or a Send Email Auth Hook, and keep the token generation Supabase does for you.
5 June 2026 · 4 min read
Custom SMTP and custom email delivery in Clerk
Send Clerk's auth email from your own domain: what custom SMTP covers, when to take delivery over with a webhook, and the code for both paths.
29 May 2026 · 4 min read
Why Gmail SMTP fails in production
Gmail SMTP works on your laptop and breaks under real load. App passwords, daily limits, spoofed From addresses, and DMARC alignment, explained with the fix.
22 May 2026 · 4 min read
Transactional email versus marketing email, and why the split matters
The difference is not tone, it is consent, reputation, and legal obligation. How to classify a message correctly and how to separate the two streams in DNS.
15 May 2026 · 5 min read
Building an email verification flow that actually works
Token design, expiry, resend limits, the race conditions nobody tests, and the copy that keeps people from giving up. A complete verification flow, end to end.
8 May 2026 · 5 min read
Why your password reset email goes to spam
Reset mail looks like phishing to a filter: urgent language, a link, a low-engagement sender. The authentication, content, and infrastructure fixes that work.
1 May 2026 · 4 min read
Sending email from Cloudflare Workers, with no SMTP and no sockets
Workers cannot open an SMTP connection, so every mail library fails there. What actually works: an HTTPS API, secrets via wrangler, queues, and cron triggers.
24 April 2026 · 5 min read
Idempotency keys and retries for transactional email
Why retrying a send is dangerous, how to choose a key that is stable across retries, and how to build a retry policy that never mails anyone the same thing twice.
17 April 2026 · 5 min read
Bounces, complaints, and suppression lists: what to do with them
Hard bounces, soft bounces, and spam complaints need three different responses. How to wire the webhook, what to suppress, and what never to suppress.