# Transactional email

A step of the [Cloud application](https://gradus.kazet.blog/tree/cloud-application) tree on Gradus, in the Serving & compute area: HTTP, workers, scaling.

Page: https://gradus.kazet.blog/tree/cloud-application/step/transactional-email

Send mail from the product's own domain through one provider, with SPF, DKIM and DMARC in place and a local catcher so tests never reach a real inbox.

Usually comes after: [Feedback loop](https://gradus.kazet.blog/tree/cloud-application/step/feedback-loop).

Leads to: [Users & identities](https://gradus.kazet.blog/tree/cloud-application/step/users-and-identities), [Email deliverability](https://gradus.kazet.blog/tree/cloud-application/step/email-deliverability).

## Prompt for your AI assistant

```
Read docs/index.md and everything under docs/product and docs/decisions. Compare three transactional email providers that fit this product, such as Resend, Postmark, Amazon SES or SendGrid: the free allowance, the price at low volume, how a new account gets approved to send and how hard it is to leave. Recommend one, stop for my pick and write the next docs/decisions record. Then set it up: send from an address on the product's own domain, publish the SPF, DKIM and DMARC records in place of the null SPF the custom domain step set, in the infrastructure code if this repository has any, keep the API key as a secret and put all sending behind one small module, with a local mail catcher for development and a fake for tests. Send one real message to an address I give you and show me from its headers that SPF, DKIM and DMARC pass.
```

Every step of the tree: https://gradus.kazet.blog/tree/cloud-application/llms.txt
