Skip to main content

Free Business Email for Your Website: Brevo + Cloudflare Email Routing Setup (Step by Step)

Fix WordPress emails that never arrive and get free hello@yourdomain forwarding with Brevo and Cloudflare Email Routing: a step-by-step guide with real screenshots.

Free Business Email for Your Website: Brevo + Cloudflare Email Routing Setup (Step by Step)

Short answer: use Brevo to send your website’s email and Cloudflare Email Routing to receive mail for hello@yourdomain.com. Both are free, together they take about 30–45 minutes, and you do not need a paid mailbox. Below is the exact setup I did on my own WordPress site, with my real screenshots, the mistakes I made and how I fixed them.

My website’s emails were silently failing. The contact form “worked”, but nothing reached my inbox. The reason turned out to be simple and common: my server could not send mail at all, and my paid mailbox was about to expire. This guide fixes both problems for free.

What you will build

Email has two separate jobs, and most guides mix them up. Keep them apart and everything gets easier:

Job What it means Tool used here
Sending Your website sends order emails, contact-form notices, password resets, ebook deliveries Brevo (free plan)
Receiving People write to hello@yourdomain.com and it lands in your Gmail Cloudflare Email Routing (free)
DNS The “address book” entries that prove your domain is allowed to send and receive Cloudflare DNS (free)

What you need before you start: a domain whose DNS is managed in Cloudflare, a Gmail address to receive mail, a WordPress site, and admin access to all three. At the time of writing, Brevo’s free plan allows about 300 emails a day, which is plenty for a small business site. Check Brevo’s pricing page for the current limit.

Step 1: Find out why your emails are not arriving

WordPress sends email through the server’s own mail system by default. Many hosts and VPS providers block outgoing mail on port 25 to stop spam, so nothing ever leaves. I confirmed it in my server’s mail log, where every attempt to reach Gmail ended with “Connection timed out” and messages sat in the queue for more than a day.

A quick check: install a mail-log plugin such as FluentSMTP (we use it later anyway) and look at the log, or ask your host whether outbound port 25 is blocked. If it is, you need to send through an email service over a different route, such as an API or port 587. That is exactly what Brevo gives you.

Step 2: Add and authenticate your domain in Brevo

  1. Create a free account at brevo.com and sign in.
  2. Open Settings → Senders, Domains & Dedicated IPs → Domains and click Add a domain. Enter your domain, for example yourdomain.com.
  3. Choose Authenticate the domain yourself (manual). The automatic option asks for permission to edit your DNS, and I preferred to add the records myself so I could see each one.
  4. Brevo now shows four DNS records. Keep this tab open, because you will copy them in the next step.

When it is done, the Domains page shows your domain as Authenticated:

Brevo Domains page showing the domain with Authenticated status
Brevo → Domains: the domain shows “Authenticated” once the four DNS records are live.

Step 3: Add the four DNS records in Cloudflare

In Cloudflare, open your domain, go to DNS → Records, and use Add record four times. Your values will differ, so always copy them from your own Brevo screen. This is the pattern:

Type Name Content Proxy
TXT @ brevo-code:… (your own code) —
CNAME brevo1._domainkey b1.yourdomain-com.dkim.brevo.com DNS only
CNAME brevo2._domainkey b2.yourdomain-com.dkim.brevo.com DNS only
TXT _dmarc v=DMARC1; p=none; rua=mailto:rua@dmarc.brevo.com —

Three things that trip people up:

  • The two DKIM records must be “DNS only” (grey cloud). If Cloudflare proxies them (orange cloud), Brevo cannot read them and verification fails.
  • Do not create a second SPF record. A domain may have only one SPF TXT record. Brevo does not require one, because its DKIM signing is enough for DMARC to pass, so I left SPF alone.
  • Cloudflare adds the quotation marks for TXT records. Paste the content without quotes.

Wait a few minutes, then go back to Brevo and click Authenticate this email domain. In my case it worked on the first try.

Step 4: Add a verified sender

Still in Brevo, open the Senders tab, click Add sender, and enter a name and an address on your domain, such as hello@yourdomain.com. Because the domain is already authenticated, the sender is verified straight away, with green ticks for DKIM and DMARC:

Brevo Senders list showing hello@ sender verified with DKIM and DMARC ticks
The hello@ sender is Verified, with a green DKIM signature and “DMARC is configured”.

Step 5: Connect WordPress to Brevo

  1. Install the free FluentSMTP plugin.
  2. In Brevo, open SMTP & API → API keys, generate a new key, and copy it. Treat it like a password: never paste it in chat, email or a public page.
  3. In WordPress, go to Settings → FluentSMTP → Add Connection, choose Brevo, set the sender email to hello@yourdomain.com, paste the key, and save. Mark it as the Default connection.
FluentSMTP settings with the Brevo connection set as default
FluentSMTP with the Brevo connection set as Default. The extra “Unknown” row is a leftover from the old setup and is not used.

The error that cost me ten minutes: “unrecognised IP address”

My first test email failed with 401: “We have detected you are using an unrecognised IP address…”. Brevo only accepts API calls from approved IP addresses. The fix is in Brevo under Security → Authorized IPs: add your server’s IP (it appears in the error message). Do this once. If you ever move to a new server, add the new IP too.

Then use FluentSMTP’s Send Test Email button and check Email Logs. You want the status to say sent.

Step 6: Receive mail on your domain with Cloudflare Email Routing

Sending is solved, but people also need to reach hello@yourdomain.com. Instead of paying for a mailbox, Cloudflare Email Routing receives mail for your domain and forwards it to your Gmail, for free.

Cloudflare Email Routing overview before setup, with routing disabled
Cloudflare → Email Routing before setup: routing is disabled and no DNS records exist yet.

6a. Add the destination address

Open the Destination addresses tab and add the Gmail address that should receive your mail. If it is the same email as your Cloudflare account it is verified at once. Any other address gets a confirmation email with a link you must click.

Cloudflare destination address shown as Verified
The destination address shows “Verified” (shown here with a placeholder address).

6b. Create the forwarding rule

In Routing rules, click Create routing rule. Type hello, pick your domain, set the action to Send to an email, and choose your Gmail as the destination.

Create routing rule dialog: hello at the domain, Send to an email, destination Gmail
The rule: hello@yourdomain.com → Send to an email → your Gmail.
Routing rules list showing the hello rule Active
The rule is Active. I left the catch-all on “Drop”, so only the addresses I create are forwarded.

6c. Replace the old mail records

Email Routing needs its own MX records. If your domain currently uses another mail provider, its MX and SPF records will conflict, and two SPF records break email. My domain used a paid mailbox I no longer wanted to renew, so I removed its records first. Warning: after this step the old mailbox stops receiving mail, so export anything you need first.

Cloudflare DNS records before the change, showing the old mail provider's MX, SPF and DKIM next to the Brevo records
Before: the old provider’s MX, SPF and DKIM records sit next to the four Brevo records.

In DNS → Records I deleted four records belonging to the old provider: its two MX records, its SPF TXT record and its DKIM TXT record. Delete them one at a time and read the confirmation dialog, which names the record. I first tried ticking several rows at once, and the table shifted after the first click, so a Brevo record ended up selected. I noticed in time and cleared the selection, but the lesson is real: one record, one confirmation.

Cloudflare DNS records after removing the old mail provider records
After cleaning up: only the website and Brevo records remain, before Cloudflare adds its own mail records.

Then, back in Email Routing → Settings → DNS records, Cloudflare lists what it needs as “Missing”:

Cloudflare Email Routing DNS records listed as missing: three MX records and a DKIM record
Cloudflare needs three MX records (route1, route2, route3), a DKIM record and an SPF record.

Click Add missing records. Cloudflare creates them and marks them Locked. After a minute, the live DNS shows the three route*.mx.cloudflare.net MX records and a single SPF record.

Step 7: Test it, and what to do when it lands in spam

From my website I sent a test message to hello@. It arrived in my Gmail within two seconds, but in the Spam folder. That is normal for a brand-new sending domain, because Gmail has no history with it yet.

Gmail inbox row showing the forwarded test message
The forwarded test message in Gmail, after I clicked “Not spam”.
The forwarded test message opened in Gmail
The message opened: from hello@yourdomain.com, sent by the website through Brevo, delivered by Cloudflare.

Check the proof: Gmail’s “Show original”

To be sure the setup was correct and not just lucky, I opened the message menu (three dots) and chose Show original. Three lines tell you everything:

Gmail Show original with SPF, DKIM and DMARC all PASS
SPF PASS, DKIM PASS (signed by my domain) and DMARC PASS. The spam placement was only a reputation issue.

If all three say PASS, your DNS is correct and the spam folder is only about reputation, which improves as real people open and reply to your emails.

Stop good mail going to spam: a Gmail filter

  1. Click Not spam on the message once. This teaches Gmail.
  2. In Gmail, open Settings → See all settings → Filters and Blocked Addresses → Create a new filter.
  3. Put hello@yourdomain.com in the To field and click Create filter.
  4. Tick Never send it to Spam and click Create filter again.
Gmail create filter dialog with the To field set to the hello address
The filter condition: To = your hello@ address.
Gmail filter options with only Never send it to Spam ticked
Tick only “Never send it to Spam”.
Gmail filter list showing the new filter
The saved filter: to:(hello@yourdomain.com) → Never send it to Spam.

My first attempt did not save, because I left the page too quickly after clicking. Always confirm the filter appears in the list and the “Your filter was created” notice shows.

Troubleshooting: the problems I hit

Symptom Cause Fix
Mail log shows “Connection timed out” Host blocks outgoing port 25 Send through Brevo (API or port 587)
401 “unrecognised IP address” Brevo only allows approved IPs Brevo → Security → Authorized IPs: add the server IP
Brevo cannot verify the domain DKIM CNAMEs are proxied (orange cloud) Set both to DNS only
Mail to hello@ bounces or goes to the old mailbox Old MX or a second SPF record still exists Remove the old provider’s records, keep one SPF
Test mail lands in Spam New domain with no sending history Mark “Not spam”, add a filter, send real mail
Dashboard still shows old settings Page not really reloaded (same address) Reload with a changed address, for example add ?x=1
Cloudflare activity log is empty Logs can lag a few minutes Check your inbox, not the log

The honest limits of this free setup

  • Replies show your Gmail address. Email Routing only receives. When you press Reply in Gmail, the answer goes out from your Gmail address, not hello@. Making Gmail reply as hello@ needs a separate “Send mail as” setup with mail-server credentials. For me the trade-off was acceptable.
  • It is not a full mailbox. There is no separate inbox, calendar or storage for hello@. Everything lands in Gmail.
  • Free plans have limits. Brevo’s free plan caps daily sends, and Brevo’s shared sending IP is also used by others.
  • Your domain registration is separate. Cancelling a mailbox does not move your domain. If you want everything in one place, transferring the domain to your DNS provider is a different job.

Frequently asked questions

Is this really free?

Yes, for a small site. Cloudflare Email Routing and Cloudflare DNS are free, and Brevo has a free plan with a daily sending limit. You only pay for your domain registration.

Can I send email from hello@yourdomain.com using only this setup?

Your website can, through Brevo. For your own replies from Gmail, you need an extra “Send mail as” configuration, otherwise replies show your Gmail address.

What does DMARC p=none do? Is it safe?

p=none means “report only”: it never blocks any mail. It gives mailbox providers a policy to look at and sends you reports. You can tighten it later, once you are sure all your sending sources are set up correctly.

Do I need an SPF record for Brevo?

Not for DMARC to pass. Brevo signs your mail with DKIM using your domain, and DMARC passes when either SPF or DKIM aligns. You must still never publish two SPF records.

Why not just use Gmail’s own SMTP server?

Gmail would send as your Gmail address, which customers then see. A dedicated sending service with your own domain looks more professional and keeps your personal address private.

Will old emails in my previous mailbox move over?

No. Email Routing only forwards new mail. Export or back up anything you need from the old mailbox before you remove its records.

Need this set up for your business?

If your site’s emails are not arriving, or you would rather have this done properly the first time, I can audit and fix your email setup, including DNS, authentication and deliverability, as part of a paid consultation. Book a session and tell me which tools you use.

Disclosure: I am not affiliated with Brevo, Cloudflare or FluentSMTP and earn nothing from these links. All screenshots are from my own setup in October 2026. Screens and limits change, so confirm current details on each provider’s own pages.

Let's Talk

Have a Project in Mind?

Whether it's a software challenge, an AI integration, or a course enquiry — I'm always open to a real conversation.

hello@debasisbhattacharjee.com · +91 8777088548 · Mon–Fri, 9AM–6PM IST