# Email routing

URL: /products/platform/email-routing · Id: `capability:email-routing`

> Email routing receives mail for a Startup’s Domains, routes each address to a Mailbox or the sink, and publishes SPF, DKIM and DMARC.

Email routing receives mail for a [Startup](/business/nouns/startup)’s [Domains](/business/nouns/domain), routes each address to a [Mailbox](/business/nouns/mailbox) or the sink, and publishes SPF, DKIM and DMARC. A Domain that sends no mail says so in DNS, so no one can send as it.

## Contract
| Clause | Terms |
| --- | --- |
| Routes | Each address on a Domain routes to one Mailbox, created with [`Mailbox.create`](/business/nouns/mailbox/create), or to the sink. Inbound mail joins its [Thread](/business/nouns/thread) as a [Message](/business/nouns/message). |
| Authenticates | [`Domain.authenticate`](/business/nouns/domain/authenticate) writes SPF, DKIM and DMARC for a sending Domain and verifies all three before its first send. |
| Sends nothing | A Domain with no Mailbox publishes `v=spf1 -all`, DMARC `p=reject` and a null MX, written by [`Domain.register`](/business/nouns/domain/register). |
| Adds a Mailbox | [`Domain.authenticate`](/business/nouns/domain/authenticate) replaces the null records with sending records in one [Change](/business/nouns/change). |
| Retires the last | When its last Mailbox retires, [`DNSRecord.set`](/business/nouns/dns-record/set) returns SPF and DMARC to null and reject, and points the MX at the sink. |
| Sink | A Domain whose `Domain.carriedIdentity` is true keeps its sink in every state, [Dormant](/business/lifecycle/states/dormant) included. The sink files each Message for the Startup's return and sends no reply. |
| Records | Every mail record is a [DNS Record](/business/nouns/dns-record) with `DNSRecord.owner` set to `platform`, so no edit breaks delivery. |

## Verbs
| Verb | Object | Event |
| --- | --- | --- |
| [Mailbox.create](/business/nouns/mailbox/create) | [Mailbox](/business/nouns/mailbox) | `Mailbox.created` |
| [DNSRecord.set](/business/nouns/dns-record/set) | [DNS Record](/business/nouns/dns-record) | [`DNSRecord.set`](/business/events/DNSRecord.set) |

## Interfaces
- [API](/code/api/reference)
- [SDK](/code/sdk/reference)
- [CLI](/code/cli/reference)
- [MCP](/code/mcp/reference)

## Example
```text
fieldnotes.co, a redirect Domain that has never received mail:

txt   @        v=spf1 -all            No server may send as the Domain
txt   _dmarc   v=DMARC1; p=reject     Receivers reject mail that claims it
mx    @        0 .                    The Domain accepts no mail
```