Hosting

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.

An email address at a custom domain arriving in a Gmail inbox for free

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:

OptionWhat you get freeThe catch
Zoho Mail Forever FreeReal mailboxes for up to 5 users, 5 GB each, on one domain, with webmail and mobile appsNo IMAP or POP, so no Outlook, Apple Mail or Thunderbird; 25 MB attachments
Cloudflare Email Routing + GmailUnlimited addresses at your domain, forwarded into your existing GmailCloudflare only receives. Sending as your domain needs an extra step, or it may land in spam.
Email that comes with your hostingMailboxes in cPanel or hPanel, with IMAP, already paid for with the hostingFree 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

  1. Sign up for Zoho Mail and choose the Forever Free plan with your own domain.
  2. Verify the domain by adding the TXT record Zoho shows at your DNS.
  3. 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

  1. Add your domain to Cloudflare's free plan and change the nameservers at your registrar (see how to connect a domain).
  2. In the Cloudflare dashboard, open your domain, then Email, Email Routing, and turn it on. Cloudflare adds its MX and SPF records for you.
  3. Add an address such as hello@yourdomain.com and set your Gmail address as the destination. Confirm the email Cloudflare sends to Gmail.
  4. 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 ? '&#10004;' : '&#10008;' ?> <?= htmlspecialchars($name) ?></td><td><?= htmlspecialchars($text) ?></td></tr>
  <?php endforeach; ?>
  </table>
<?php endif; ?>
</body>
</html>
CheckWhat it means
MXWhere mail for your domain is delivered. It names the service: Cloudflare, Zoho, Google, Microsoft. No MX means nobody can email you.
SPFWhich servers may send mail as your domain. There must be exactly one SPF record.
DMARCWhat 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.

Where to go next

Questions people ask

Is Zoho Mail really free?
Yes. Zoho Mail's 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 mobile apps. It does not include IMAP or POP, so it does not work in Outlook or Apple Mail.
How can I use a custom domain for email for free?
Use Zoho Mail's free plan for real mailboxes, or Cloudflare Email Routing to forward your domain's mail into your free Gmail and send as your domain from Gmail. If you already pay for hosting, its included email accounts also cost nothing extra.
Is custom domain Gmail free?
No. A real Gmail mailbox on your own domain is Google Workspace, which is paid per user. You can receive your domain's mail in free Gmail with Cloudflare Email Routing and send as your domain from Gmail.
What is the best free email with a custom domain?
Cloudflare Email Routing into Gmail for one person who already uses Gmail, and Zoho Mail's free plan for a small team of up to 5 people who each need their own mailbox.
Why do emails I send from Gmail as my domain go to spam?
When you send through smtp.gmail.com, the mail is signed as gmail.com, not your domain, so DMARC fails. Send through a service that signs with your domain's DKIM key, such as Brevo's free plan, and keep one correct SPF record.
Can I get a free custom email address without a domain?
Not one that ends in your own name. Without a domain you get an address at the provider's domain, such as gmail.com or proton.me. A domain costs about $10 a year, and the email on it can then be free.
What is the most hacked email service?
The largest breach on record was Yahoo's, which affected all of its roughly 3 billion accounts in 2013. Most accounts today are hacked through reused passwords and phishing, so use a unique password and two-step verification.
Is there free email hosting?
Zoho Mail's free plan hosts real mailboxes for up to 5 users at no cost. Cloudflare Email Routing forwards mail for free but does not store it. Most web hosting plans include email accounts at no extra cost.
How do I set up Zoho free email with my domain?
Sign up for the Forever Free plan, verify your domain with the TXT record Zoho shows, create your mailbox, then add Zoho's MX records (mx.zoho.com, mx2.zoho.com, mx3.zoho.com), the SPF record v=spf1 include:zohomail.com ~all, and the DKIM record.
Is free email good enough for a business?
For a start, yes. Pay when you need more than 5 mailboxes, IMAP for desktop mail apps, more storage or support. Send your website's order and password emails through a separate SMTP service.

Written by Habib Baloch

I build Android apps, websites and Ubuntu servers, and write down exactly how I did it.

Ask me about this guide →