Let a transactional send carry one attachment

FeatureEmailService
Shipped
September 2, 2026 at 5:21 AM UTC
Author
Kamo
Commit
baf3c88

Added for scheduled reports, which are a rendered PDF or workbook that has to reach people who may have no account — a link would not be a delivery for them. The SMTP layer has taken attachments since it was written; this path simply passed null. So nothing about how mail is built changes, the field is optional, and every existing caller takes exactly the route it always did. Base64 rather than multipart because this endpoint is JSON server-to-server and every caller already builds a JSON body. Oversized and malformed attachments are REFUSED rather than truncated: a bounced 40MB workbook costs the sending domain reputation, and a silently truncated one is a file the recipient cannot open and cannot explain. The throw is what lets the caller record a failed run instead of a delivered one.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing