> For the complete documentation index, see [llms.txt](https://docs.yeymail.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.yeymail.com/using-yeymail/custom-domains.md).

# Custom domains

If you own a domain, use it. Addresses on it look exactly like a personal mailbox (because that's what they are), and if you ever leave YeyMail, they come with you. That's the difference between renting your identity and owning it.

Starter covers **5 domains**; Plus is unlimited.

## Adding one

**Domains → Add domain.** Enter the domain, then publish the records we show you at your DNS provider. Press **Verify** and we check them.

We detect who runs your DNS from your nameservers and tailor the instructions on the domain's DNS tab. For the two most common providers there is a full walkthrough:

* [Cloudflare](/using-yeymail/custom-domains/cloudflare.md): Email Routing locks the MX records it created
* [Namecheap](/using-yeymail/custom-domains/namecheap.md): mail settings are one dropdown with one winner, and saving takes two clicks

### The records

Replace `yourdomain.com` with your own. Values are exact.

| Type | Host                 | Priority | Value                                                 |
| ---- | -------------------- | -------- | ----------------------------------------------------- |
| MX   | `@`                  | 10       | `mx1.yeymail.com`                                     |
| MX   | `@`                  | 20       | `mx2.yeymail.com`                                     |
| TXT  | `@`                  | —        | `v=spf1 include:yeymail.com ~all`                     |
| TXT  | `default._domainkey` | —        | (the long `v=DKIM1; …` value shown in your dashboard) |
| TXT  | `_dmarc`             | —        | `v=DMARC1; p=none; rua=mailto:dmarc@yeymail.com`      |

Notes that save support tickets:

* **Priority is its own field at most DNS providers.** The `10` is not part of the hostname. Put it in the provider's own priority (or *preference*) box, and the hostname on its own. A few providers (Route 53, Google Cloud DNS) give you a single field instead, and there you enter both together as `10 mx1.yeymail.com`.
* **Add both MX records.** They point at the same server today, so adding only the first will appear to work. The second exists so that when we bring a real second inbound node online we repoint it inside our own zone. You never have to touch your DNS again. Setting it up now is what buys you that.
* **Delete any MX records already on the domain.** Most hosts add their own, and a lower priority number wins, so leaving theirs in place keeps mail going to them. Outranking them is not enough.
* **If you already have an SPF record, merge them.** A domain may only have one. Add `include:yeymail.com` to the existing record rather than publishing a second `v=spf1` line. Two SPF records is a permanent error, and mail will start failing.
* **Copy the DKIM value from your own dashboard**, exactly as shown; it is the key we sign your domain's outgoing mail with.
* DNS propagation is usually minutes, occasionally an hour. Verify again if the first attempt fails.

On **cPanel** hosts (Bluehost, Namecheap Hosting and many shared hosts), also set **Email → Email Routing** to *Remote Mail Exchanger*. Left on *Local*, the server keeps your domain's mail itself and ignores your MX records entirely — correct DNS, nothing delivered.

Once verified, create aliases on the domain exactly as you would on `@yeymail.com`.

## Catch-all (Plus)

Switch on catch-all and **every** address on the domain works without creating it first: `anything@yourdomain.com` arrives. Useful when you want to invent addresses on the spot without a dashboard trip.

### Rules

Catch-all on its own is blunt: it accepts everything, including whatever a spammer guesses. Rules let you shape it. Each rule matches a local part (literally, or as a regular expression) and either **forwards** it somewhere specific or **blocks** it outright. Rules are evaluated in order; the first match wins. Anything that matches nothing falls through to your default inbox.

A blocked pattern is genuinely rejected at the SMTP level, not accepted and discarded.

## Per-domain visibility

Each domain has its own **delivery logs** (which address, when, and whether we delivered it or it bounced, but never content), **usage statistics**, and a **suppression list** of addresses we've stopped delivering to after a hard bounce. You can clear a suppression once you've fixed the underlying problem.

## If a domain's DNS breaks

We re-check periodically. If the records disappear, the domain is marked inactive and mail to it stops. That is the correct behaviour, because forwarding for a domain that no longer points at us would mean accepting mail we can't prove we're allowed to handle. Fix the records and verify again.

Domains are also paused automatically if you exceed your plan's allowance after a downgrade, and if a subscription lapses entirely. See [Billing](/using-yeymail/billing.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.yeymail.com/using-yeymail/custom-domains.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
