Every provider implements send({ to, subject, html, text?, from?, replyTo? }) and returns { id }. They use plain fetch, so they run on edge runtimes. SMTP needs Node.
Amazon SES
ses calls the SES v2 SendEmail API and signs the request with SigV4 using Web Crypto, so the AWS SDK is not needed. The from address must be a verified SES identity, and the account must be out of the SES sandbox to send to arbitrary recipients. Set endpoint to point at LocalStack.
Postmark
postmark uses the outbound message stream by default. Set messageStream for a transactional stream you created. The from address needs a confirmed sender signature.
Using them for OTP
emailOtpSender(provider) turns any of these into a sender for the unified OTP service. Last modified on October 9, 2026