Setup guide
From bare domain to working inbox, step by step.
Everything below happens in your browser and your registrar's control panel. No terminal, no server, no prior email experience needed.
Before you start, you need three things
A domain you own (e.g. acme.com) — any registrar works
Access to that domain's DNS settings — wherever you log in to manage the domain
A free Resend account — created in step 2, takes two minutes
Create your Freemail account
~1 minSign up with your current email address (Gmail is fine — this is just for logging in). We send a verification link; click it and you're in.
Get a free Resend API key
~2 minWhy this step exists: Resend is the delivery service that carries your mail. On the Free plan you connect your own Resend account, so its free quota — 3,000 emails a month, up to 100 a day, one verified domain — belongs to you alone. No shared limits with other Freemail users.
- Go to resend.com/signup and sign up (free, no card).
- In the left sidebar choose API Keys, then Create API key.
- Name it freemail, set permission to Full access — not "Sending access", which can't create the domain or the inbound webhook. Click Create.
- Copy the key — it starts with re_. You'll paste it in the next step.
resend.com → API Keys
The key is shown once, right after you create it.
Connect your domain in Freemail
~1 minIn your inbox, open Domains → Connect your domain. Type your domain, paste the re_… key, and hit Next. Freemail registers the domain with your Resend account and shows the exact DNS records you'll copy in step 4 — each with its own copy button.
Add the DNS records at your registrar
~5 minOpen your registrar's DNS panel in another tab and add each record from your connect screen. The table below shows the shape — your screen has the exact values with one-click copy, so you never retype a DKIM key.
| Type | Name | Value | What it does |
|---|---|---|---|
| MX | @ | inbound.resend.com | routes incoming mail to your inbox |
| TXT | @ | v=spf1 include:resend.com ~all | authorizes sending (SPF) |
| TXT | resend._domainkey | p=MIGfMA0… (from your connect screen) | signs your mail (DKIM) |
| MX | send | feedback-smtp… (from your connect screen) | bounce handling |
| TXT | send | v=spf1 include:amazonses.com ~all | SPF for the send subdomain |
Pick your registrar for the exact click-path:
Verify
usually minutesBack in Freemail, click Verify DNS. Records usually propagate within minutes; occasionally DNS takes up to an hour (rarely, longer). Green means done. Not green? The troubleshooting section covers the mistakes that cause 90% of failures.
Add an address and send your first email
~1 minAdd hello (or your name) as an address — or flip on catch-all to receive mail sent to anything@your domain. Note: on the Free plan, inbound mail also counts against your Resend quota, so catch-all on a busy domain eats it faster.
Then send a test to your personal email and reply to it. Both directions working? You're running email on your own domain.
That's the whole setup.
No renewals to babysit, no server to patch. Add more addresses any time under Domains.
Open your inboxTroubleshooting
Verify keeps failing after 30+ minutes
Check the Name column: most registrars want @ for the root — but some want it blank, and some want the full domain. Also confirm you didn't paste a trailing space into the DKIM value.
"You already have an SPF record"
A name may only carry one SPF TXT record. Merge them: keep one record and combine the include: parts, e.g. v=spf1 include:resend.com include:other-provider.com ~all.
Cloudflare users: the record shows an orange cloud
MX and TXT records must be DNS only (grey cloud). Proxied records break mail routing.
I had Google Workspace / Zoho mail on this domain
Your old MX records and Freemail's can't coexist — incoming mail follows MX. Export or forward anything you need from the old mailbox first, then switch. The old mailbox stops receiving new mail once the new records are live.
Want stricter spoofing protection? (optional DMARC)
Add a TXT record at _dmarc with value v=DMARC1; p=quarantine; — it tells inbox providers what to do with mail that fails SPF/DKIM. Optional, and safe to add after everything works.