Skip to content

Email

sendTransactional, resolveMailer, resolveMailerStatus, createMailer, astroidMailTheme, and the templates magicLinkEmail, passwordResetEmail, inquiryNotificationEmail, inquiryConfirmationEmail, sendInquiryMail.

Always build options with resolveMailer(env) rather than by hand—it’s the only thing that applies the placeholder-sentinel check, so a hand-built options object can call the Email API with an envelope sender of literally DUMMY_REPLACE_ME.

When a send is skipped the message is logged, but the body is withheld unless the environment reads as development—it carries single-use sign-in and reset links, and logOnly engages in production whenever MAIL_FROM is unset. Pass devLog: true to force it (for example, under bare wrangler dev).