I’ve always wanted an email address from my own domain. Imagine how cool it would be to have an email like [email protected] on your resume!

When I first had this idea, I didn’t know much about email protocols, DNS records, or IT in general. I bought a domain but left the idea on the back burner for years. Recently, I decided to finally make it happen. I investigated a few options and wanted to summarize my findings here.

My goals were simple:

  1. Use the same address for sending and receiving.
  2. Keep it free or very affordable.
  3. Ensure emails are delivered reliably and don’t get marked as spam.
  4. Access my email from multiple devices.

Here’s a breakdown of what worked, what didn’t, and why.


Part 1: A Quick Primer on Email Essentials

Before diving in, you need to understand a few key concepts that make email work. Think of it like the postal service for the internet.

  • DNS Records: The internet’s address book. A MX (Mail Exchanger) record is a specific entry in this address book that tells the world, “Send all mail for this domain to this particular server.”

  • Email Protocols: These are the rules for sending and receiving mail.

    • SMTP (Simple Mail Transfer Protocol): This is the postman. SMTP is used for sending emails from your email client to a server, and from that server to the recipient’s server.
    • IMAP (Internet Message Access Protocol): This is your mailbox. IMAP is used for receiving and storing emails. It syncs your mail across all your devices, so if you read an email on your phone, it shows as read on your laptop too.
  • Email Security Protocols: These are like digital signatures and ID checks to prevent fraud and spam. They are set up as TXT records in your DNS.

    • SPF (Sender Policy Framework): This record lists all the servers that are authorized to send email on behalf of your domain. It’s like saying, “Only mail sent from these official post offices is legitimate.”
    • DKIM (DomainKeys Identified Mail): This adds a unique digital signature to every email you send. The recipient’s server can check this signature to verify the email hasn’t been tampered with in transit.
    • DMARC (Domain-based Message Authentication, Reporting, and Conformance): This is the rulebook. It tells receiving servers what to do if an email fails the SPF or DKIM checks (e.g., reject it or send it to spam). It also provides a way for servers to report back to you about who is trying to send email from your domain.

Part 2: Options That Worked

After some trial and error, I found two solid methods that met all my goals.

Option 1: Cloudflare email routing for receiving and Zoho for sending

This approach uses two best-in-class free services for their respective strengths.

A Note on Zoho’s “Free Plan”

While many online sources suggest Zoho’s free plan supports up to 5 users, this may refer to an older plan or different region. As of September 2025, the current “Mail Free” plan I signed up for appears to be limited to a single user. When I tried to add a second, I received a “License limit reached” error. Always check the specifics of the current offer before committing.

Setup Steps

  1. Configure Cloudflare for Receiving:

    • In your Cloudflare dashboard, navigate to your domain and select Email > Email Routing.
    • Follow the setup wizard. Cloudflare will provide the necessary MX and TXT records it needs to function.
    • Add these records in the DNS > Records section of your domain.
    • Back in the Email Routing tab, under Custom addresses, create your desired email (e.g., [email protected]) and set the “Action” to “Send to” your personal email address (e.g., [email protected]).
  2. Configure Zoho for Sending:

    • Sign up for the “Mail Free” plan on the Zoho Mail website.
    • The first step is domain verification. Zoho will provide a unique TXT or CNAME record that you must add to your DNS records in Cloudflare to prove you own the domain.
    • Once verified, navigate to the Zoho Mail settings to find your SMTP server details. They will be something like Server: smtp.zoho.com, Port: 587 (TLS), and your Zoho account email/password for authentication.
    • You can now plug these SMTP credentials into any email client or into Gmail’s “Send mail as” feature to send emails from your custom domain.

Option 2: Mailgun for both sending and receiving

Mailgun is a more technical, API-first service, but its free plan is very capable for personal use.

⚠️ Limitation: Mailgun’s free tier is capped at 100 emails/day and limited to 1 custom sending domain.

Setup Steps

  1. Configure Domain in Mailgun:

    • In the Mailgun dashboard, go to Sending > Domains > Add New Domain.
    • Enter your domain name (e.g., yourdomain.com) and choose your server region.
    • Mailgun will then generate a list of DNS records you need to add: typically two MX records for receiving, and two TXT records for SPF and DKIM.
    • Copy these records carefully.
  2. Add DNS Records in Cloudflare:

    • Navigate to DNS > Records in your Cloudflare dashboard.
    • For each record Mailgun provided, create a corresponding new entry. Once all records are added, it may take some time to propagate. Mailgun will show the domain’s status as “Verified” once it detects them.
  3. Set Up Routing and Credentials in Mailgun:

    • For receiving emails, go to Receiving > Create Route. Set the “Expression Type” to Match Recipient and enter your custom email address. For the “Action”, select Forward and enter your personal email address.
    • For sending, go to Sending > Domain Settings > SMTP credentials. Here you can create a new SMTP user and password. These are the credentials you will use in your email client.

Part 3: Options I Tried But Gave Up

Not everything worked as planned. These attempts failed because of critical email security rules.

Option 1: Using Cloudflare Email Routing, Mailgun on a Subdomain, and Gmail

On paper, this combination, often adapted from guides like the one on FreeCodeCamp, seemed clever. The goal was to use Cloudflare for incoming mail at [email protected] and use Mailgun on a subdomain (m.minamoto.me) for sending.

The Result: DMARC Failure Test emails sent via this method consistently failed DMARC checks and landed in the spam folder. The root cause was a subtle but critical detail in how DMARC alignment is interpreted. An email passes DMARC if it passes SPF or DKIM and the domain in that check “aligns” with the From: header domain. The problem was the “relaxed alignment” rule.

  • The Official Standard (RFC 7489): The technical standard for DMARC uses the “Organizational Domain” concept. Since minamoto.me (From) and m.minamoto.me (DKIM) share the same organizational domain, this should have passed.
  • The Practical Implementation (Google’s Rule): Major providers like Google use a stricter, directional interpretation. According to Google’s own documentation, the From: domain must match or be a subdomain of the DKIM domain.

My setup—sending from the parent domain while authenticating with a subdomain—violated Google’s rule, causing an instant DMARC alignment failure.

Option 2: Using Cloudflare email routing and Gmail as an SMTP server

Another common suggestion, detailed in guides like this one by Pradeep Singh, is to use Cloudflare for receiving and then use your standard Gmail account credentials for sending mail.

This is a non-starter. With a free Gmail account, sending from a custom domain doesn’t fully work. Emails usually show an annoying “via gmail.com” header and may fail DMARC because the authenticating domain (gmail.com) doesn’t align with your custom domain. This feature is really intended for users with a paid Google Workspace account. That’s why I dropped this approach.


Part 4: Some Alternatives

If you’re willing to spend a little money, there are easier, more integrated options.

Alternative 1: Apple iCloud+

If you already pay for an Apple iCloud+ subscription, you can add a custom email domain. It’s incredibly easy to set up, especially with Cloudflare as your DNS provider. For instructions, see Apple’s guide on how to add a domain you already own to iCloud Mail.

However, be aware of a few limitations:

  • You can have up to five custom domains.
  • Each person can only have three email addresses per domain.
  • The sender name shown in the “From” field is tied to your Apple ID name and can’t be changed for different addresses.