Free Email with Your Own Domain: Zoho, Cloudflare + Gmail, and What Works
Three ways to get email at your own domain for free: Zoho Mail's free plan, Cloudflare Email Routing into Gmail, and the mailboxes that come with hosting. The DNS records for each, why mail sent through Gmail can land in spam, and a tested checker for MX, SPF and DMARC.
you@yourdomain.com looks far more trustworthy than yourbusiness123@gmail.com, and you can have it for free. There are three free ways that work today, each with a catch worth knowing before you choose.
This guide compares them, walks through the two most popular setups, shows the DNS records each one needs, explains why mail you send through Gmail can land in spam, and gives you a small tested page that checks your domain's email records.
Can you get email with your own domain for free?
Yes, once you own the domain (about $10 a year). The email itself can be free:
| Option | What you get free | The catch |
|---|---|---|
| Zoho Mail Forever Free | Real mailboxes for up to 5 users, 5 GB each, on one domain, with webmail and mobile apps | No IMAP or POP, so no Outlook, Apple Mail or Thunderbird; 25 MB attachments |
| Cloudflare Email Routing + Gmail | Unlimited addresses at your domain, forwarded into your existing Gmail | Cloudflare only receives. Sending as your domain needs an extra step, or it may land in spam. |
| Email that comes with your hosting | Mailboxes in cPanel or hPanel, with IMAP, already paid for with the hosting | Free only if you already pay for hosting; delivery depends on the server's reputation |
| Google Workspace or Microsoft 365 | – | Not free: a monthly fee per user |
Is custom domain Gmail free?
No. Gmail with your own domain as a real mailbox is Google Workspace, which is paid per user. The free trick people use, and what most answers on Reddit recommend, is the Cloudflare setup below: mail to your domain arrives in your normal free Gmail, and Gmail sends as your domain.
Which is the best free email with a custom domain?
- One person who lives in Gmail: Cloudflare Email Routing into Gmail.
- A small business with up to 5 people: Zoho Mail's free plan, so each person has a real, separate mailbox.
- You already have cPanel hosting: use its mailboxes, and send through a mail service if mail lands in spam.
Option 1: Zoho Mail free plan
Is Zoho Mail really free?
Yes. The Forever Free plan has no time limit and needs no card: up to 5 users with 5 GB each on one domain, used through the web and Zoho's mobile apps. It does not include IMAP, POP or ActiveSync, so you cannot read it in Outlook or Apple Mail, and it is for one domain only. Paid Zoho plans start low if you outgrow it.
Set it up
- Sign up for Zoho Mail and choose the Forever Free plan with your own domain.
- Verify the domain by adding the TXT record Zoho shows at your DNS.
- Create your mailbox, then add these records at your DNS (remove any old MX records first):
Type Name Value Priority
MX @ mx.zoho.com 10
MX @ mx2.zoho.com 20
MX @ mx3.zoho.com 50
TXT @ v=spf1 include:zohomail.com ~all
TXT (the DKIM name Zoho shows) (the DKIM value Zoho shows)
Zoho accounts in Europe, India and other regions use their own MX names (such as mx.zoho.eu); copy exactly what Zoho's setup page shows.
Option 2: Cloudflare Email Routing into Gmail
This is how to create your own email address with your domain and use it from free Gmail.
Receive: forward your domain's mail into Gmail
- Add your domain to Cloudflare's free plan and change the nameservers at your registrar (see how to connect a domain).
- In the Cloudflare dashboard, open your domain, then Email, Email Routing, and turn it on. Cloudflare adds its MX and SPF records for you.
- Add an address such as
hello@yourdomain.comand set your Gmail address as the destination. Confirm the email Cloudflare sends to Gmail. - Optional: a catch-all rule forwards every address at the domain.
Send: make Gmail send as your domain
In Gmail, open Settings, See all settings, Accounts and Import, and next to Send mail as click Add another email address. Gmail then asks for an SMTP server, and here is the catch:
- Gmail's own SMTP (
smtp.gmail.com, port 587, with a Google app password) works, but the mail is signed as gmail.com, not your domain. Receivers see that the signature does not match your domain, DMARC fails, and the mail is more likely to land in spam. - A sending service that signs as your domain fixes it. Brevo's free plan, for example, sends up to 300 emails a day: verify your domain in Brevo (it shows the DKIM records to add), create an SMTP key, and in Gmail use
smtp-relay.brevo.com, port 587, with your Brevo login and that key.
Keep one SPF record only. If a sending service asks you to add its SPF include, add it to the line Cloudflare made instead of creating a second one:
Wrong: two SPF records (receivers may treat both as broken)
TXT @ v=spf1 include:_spf.mx.cloudflare.net ~all
TXT @ v=spf1 include:example-sender.com ~all
Right: one record with both
TXT @ v=spf1 include:_spf.mx.cloudflare.net include:example-sender.com ~all
Option 3: free email hosting with your web hosting
Nearly every cPanel or hPanel plan includes email accounts. In cPanel open Email Accounts, create you@yourdomain.com, and read it in webmail or any mail app with IMAP. It is the simplest option if you already pay for hosting, but on cheap shared servers the outgoing mail shares an IP with many other sites, so check where it lands before you rely on it.
A free custom email address without a domain?
Not really: an address that ends in your own name needs a domain you own. Without one you get an address at the provider's domain, such as gmail.com, outlook.com or proton.me. Aliases from services such as SimpleLogin or Firefox Relay hide your real address, but they still end in the service's domain. A domain costs around $10 a year, and the email on it can then be free.
Try it: check your domain's email records
Upload this page to any PHP hosting and open email-dns-check.php?domain=yourdomain.com. It shows where your domain's mail is delivered and which service runs it, and whether SPF and DMARC are set up:
<?php
// email-dns-check.php: are the email records of my domain right?
// Open email-dns-check.php?domain=yourdomain.com
$domain = strtolower(trim($_GET['domain'] ?? ''));
$domain = preg_replace('#^(https?://|.*@)#', '', $domain);
$domain = preg_replace('#[/:].*$#', '', $domain);
$valid = (bool)preg_match('/^(?=.{4,253}$)([a-z0-9-]+\.)+[a-z]{2,}$/', $domain);
function txt($name) {
$found = @dns_get_record($name, DNS_TXT);
return is_array($found) ? array_map(fn($r) => $r['txt'] ?? '', $found) : [];
}
$checks = [];
if ($valid) {
// MX: where mail for the domain is delivered
$mx = @dns_get_record($domain, DNS_MX) ?: [];
usort($mx, fn($a, $b) => $a['pri'] <=> $b['pri']);
$hosts = array_values(array_filter(array_map(fn($r) => rtrim(strtolower($r['target']), '.'), $mx))); // "." means "no mail"
$who = 'another mail service';
foreach (['mx.cloudflare.net' => 'Cloudflare Email Routing', 'zoho' => 'Zoho Mail', 'google.com' => 'Google Workspace',
'outlook.com' => 'Microsoft 365', 'improvmx' => 'ImprovMX'] as $part => $name) {
if ($hosts && strpos(implode(' ', $hosts), $part) !== false) { $who = $name; break; }
}
$checks[] = ['MX (receiving)', (bool)$hosts, $hosts ? implode(', ', $hosts) . " ($who)" : 'No MX record: nobody can email this domain.'];
// SPF: which servers may send mail as the domain. There must be exactly one.
$spf = array_values(array_filter(txt($domain), fn($t) => stripos($t, 'v=spf1') === 0));
if (count($spf) === 1) {
$checks[] = ['SPF (who may send)', true, $spf[0]];
} else {
$checks[] = ['SPF (who may send)', false, $spf ? 'More than one SPF record: merge them into one line.' : 'No SPF record: your mail is more likely to land in spam.'];
}
// DMARC: what receivers should do with mail that fails SPF and DKIM
$dmarc = array_values(array_filter(txt('_dmarc.' . $domain), fn($t) => stripos($t, 'v=DMARC1') === 0));
$checks[] = ['DMARC (policy)', (bool)$dmarc, $dmarc ? $dmarc[0] : 'No DMARC record. Gmail and Yahoo expect one from domains that send email.'];
}
?>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Email DNS check</title>
<style>body{font-family:system-ui,sans-serif;max-width:760px;margin:30px auto;padding:0 16px}input,button{padding:9px;font:inherit}td{padding:8px 12px;border-bottom:1px solid #ddd;vertical-align:top;word-break:break-word}.ok{color:#15803d}.no{color:#b91c1c}</style>
</head>
<body>
<h1>Email DNS check</h1>
<form>
<input name="domain" placeholder="yourdomain.com" value="<?= htmlspecialchars($domain) ?>" required>
<button>Check</button>
</form>
<?php if ($domain !== '' && !$valid): ?>
<p>That does not look like a domain name.</p>
<?php elseif ($checks): ?>
<table>
<?php foreach ($checks as [$name, $ok, $text]): ?>
<tr><td class="<?= $ok ? 'ok' : 'no' ?>"><?= $ok ? '✔' : '✘' ?> <?= htmlspecialchars($name) ?></td><td><?= htmlspecialchars($text) ?></td></tr>
<?php endforeach; ?>
</table>
<?php endif; ?>
</body>
</html>
| Check | What it means |
|---|---|
| MX | Where mail for your domain is delivered. It names the service: Cloudflare, Zoho, Google, Microsoft. No MX means nobody can email you. |
| SPF | Which servers may send mail as your domain. There must be exactly one SPF record. |
| DMARC | What receivers should do with mail that fails the checks, and where to send reports |
If DMARC is missing, add this record. p=none only asks for reports, so nothing gets blocked while you check that all your mail passes:
Type Name Value
TXT _dmarc v=DMARC1; p=none; rua=mailto:you@yourdomain.com
Gmail and Yahoo have required SPF, DKIM and DMARC from senders of bulk mail since 2024, and mail without them is far more likely to be filtered as spam.
What is the most hacked email service?
The largest email breach on record was Yahoo's: all of its roughly 3 billion accounts were affected in 2013, as the company disclosed in 2017. Today most email accounts are not hacked through the provider at all, but through reused passwords and phishing. Whatever service you choose: use a unique password, turn on two-step verification, and be wary of any email that asks you to log in.
Free email for a business: when to pay
Free setups are fine for a start. Pay for email when you need more than 5 mailboxes, IMAP for Outlook or Apple Mail, more storage, shared calendars, or support you can call. And keep two kinds of mail apart:
- Your people's mailboxes: Zoho, Google Workspace or Microsoft 365
- Mail your website sends (order confirmations, password resets, download links): a transactional mail service over SMTP, so a busy shop does not hurt the reputation of your own mailboxes
A shop that sends its own email
Our digital products shop script sends order confirmations and download links by email through SMTP, so you can use your Zoho mailbox, your hosting's mail or a sending service, and it lands in the inbox instead of spam. It can also read payment notification emails in a Gmail inbox and verify orders automatically when the transaction ID and amount match.