
ImprovMX will put hello@yourdomain.com in Gmail. It will not send.
Free forwarding has no SMTP. If you reply through Gmail's own servers, the message is signed as Gmail pretending to be your domain. Yahoo has been bouncing that for years. Outlook is not kinder. This page is the send hop: Gmail "Send as" pointed at a real relay, plus the DNS that makes that relay honest.
If you still need MX and aliases, start with the ImprovMX free plan setup. If you are still choosing a forwarder, use the ImprovMX vs Cloudflare vs Zoho comparison. ImprovMX links on this page are affiliates.
01 Receive
ImprovMX
MX on the domain. Aliases land in Gmail. Free does not send.
02 Inbox
Gmail
One inbox you already live in. Search, labels, phone. Not a mailbox on the domain.
03 Send
Brevo or SES
SMTP in Gmail “Send as”, or an app. SPF and DKIM belong to this hop.
What sending from a custom domain actually means
Receiving is MX. Sending is SPF, DKIM, and whether the From address matches those records.
SPF is a TXT record that lists who may send mail that claims your domain. One record. Multiple include: values inside it. Two separate v=spf1 records is a PermError. Receivers treat that as a fail.
DKIM is a cryptographic signature. The relay you send through publishes a public key as CNAME (or TXT). The message carries a signature. If they match, the From domain is not a costume.
DMARC tells receivers what to do when SPF or DKIM fail, and where to send reports. Start with p=none so you can read the reports before you ask anyone to reject mail.
Gmail "Send as" is not a sending product. It is a From picker. The SMTP host you type in that dialog is the product. Type smtp.gmail.com and you get Gmail's reputation plus a "via Gmail" badge. Type Brevo or SES and the message is signed by that relay, as your domain, if DNS is right.
I learned this the slow way. Support replies to people who already knew me were fine. The first cold reply to a paying user sat in spam. The headers said Gmail. The From said my domain. That mismatch is the whole bug.
Four ways to send, and which one I pick
People who already know you
Gmail SMTP (workaround)
smtp.gmail.com, app password, “via Gmail” on the message. Fine for friends. Do not use it on a customer.
Support replies on free
Brevo SMTP
300 emails/day, forever free. Authenticate the domain, then point Gmail Send as at smtp-relay.brevo.com.
One vendor, paid
ImprovMX Light
$50/year, 25 SMTP sends/day. Same dashboard as forwarding. I pay this when I do not want a third account.
App mail at volume
Amazon SES
Sandbox until production access. Cheap after that. More AWS than most side projects need on day one.
Default for a new project: ImprovMX inbound, Gmail as the inbox, Brevo SMTP in Gmail Send as. 300 emails a day on Brevo's free plan is more than I reply. Unused volume does not roll over, which does not matter at that volume.
I pay ImprovMX Light when I already have several domains on ImprovMX and I do not want a third vendor for 25 sends a day. Light is $50/year. SMTP starts there. I covered the tier math in the free plan post.
I open SES when an app is sending, not a human. Password resets, inbound form copies, receipts. SES is cheap. It is also an AWS account, a region, SMTP credentials that are not your IAM keys, and a sandbox that will not mail a stranger until you request production access.
I do not use Gmail's SMTP for anyone who did not already have my address. ImprovMX documents it as a workaround with weak authentication. They are not being coy.
Do not run two relays on the same domain "just in case." Pick one for human mail. If the app also sends, put it on a subdomain (notify.yourdomain.com) or merge SPF carefully. SPF allows 10 DNS lookups. Nested includes count. Blow the cap and SPF breaks for everyone.
Authenticate the domain at Brevo before you touch Gmail
Create a Brevo account. Skip the campaign builder. You want Senders, domains, and dedicated IPs (the label moves; look for domain authentication) and SMTP & API.
Add the root domain you already forward with ImprovMX. Brevo will give you:
- An SPF
include(include:spf.brevo.com) - One or more DKIM CNAMEs
Do not add a second SPF TXT. Merge ImprovMX and Brevo into the record you already have:
v=spf1 include:spf.improvmx.com include:spf.brevo.com ~allIf you were still including Google because you used Gmail SMTP, drop _spf.google.com once Gmail is no longer the relay. Dead includes still cost lookups.
Copy the DKIM CNAMEs exactly. Wait until Brevo marks the domain authenticated. SMTP from an unverified From is how you spend an afternoon debugging Gmail instead of DNS.
Then open SMTP & API. Generate an SMTP key. That is not an API key. The host is:
Host: smtp-relay.brevo.com
Port: 587 (STARTTLS)
User: the SMTP login shown in that screen
Password: the SMTP key you just createdPort 465 (SSL) also works. 587 is what I put in Gmail. 2525 exists for networks that block the usual ports. I have never needed it from Gmail.
Brevo free is 300 emails per day, campaigns and transactional combined. Hit the cap and extra messages sit in a retry queue (up to 1,000) or they do not go. This is a support-and-forms budget, not a newsletter budget. Campaigns on the free plan can carry a Brevo footer. SMTP transactional mail does not, which is why this stack uses SMTP and not the campaign UI.
Point Gmail Send as at that relay
You need 2-step verification on the Google account. You do not need a Google app password if the SMTP host is Brevo. App passwords are for smtp.gmail.com.
- Gmail → Settings → See all settings → Accounts and Import → Send mail as → Add another email address.
- Name people should see. Email:
hello@yourdomain.com(or whichever alias ImprovMX already forwards). - Untick "Treat as an alias." If that box stays on, Reply still behaves like Gmail is the identity. I have shipped that bug more than once.
- SMTP server
smtp-relay.brevo.com, port587, TLS. Username and password from Brevo's SMTP screen, not your Google password. - Gmail sends a confirmation code to
hello@…. ImprovMX forwards it into this same inbox. Paste the code.
Set hello@ as the default in that list if most of your outbound mail should look like the domain.
Send a test to a second account. Open the raw message. You want DKIM pass for your domain, SPF pass aligned with Brevo, and no via gmail.com on the From line. If the test only exists in Sent, you mailed the destination Gmail from itself. Use a second account, same trap as inbound testing.
Yahoo and Outlook are the receivers that matter. Gmail-to-Gmail will forgive sins that a customer inbox will not.
When Amazon SES is the better relay
SES is the right call when volume will grow past 300/day, or when the sender is code, not you sitting in Gmail.
New SES accounts start in the sandbox. You can use every feature. You can only send to verified email addresses (or the verified domain, depending on how you set identities), with a low daily cap, until AWS grants production access. Request that from the SES Get set up page, per region. Describe transactional mail, a real website URL, and how you handle bounces. Approval is often a day. It is not instant.
SMTP host is regional:
Host: email-smtp.us-east-1.amazonaws.com
Port: 587
User / password: SMTP credentials from the SES console, not your IAM access keySingapore-hosted projects of mine use ap-southeast-1. Credentials do not transfer across regions. Production access does not either. Verify the domain in the region you will actually call.
SPF if SES is the only outbound relay besides ImprovMX:
v=spf1 include:spf.improvmx.com include:amazonses.com ~allEasy DKIM in SES is three CNAMEs. Add them. Do not also leave Brevo DKIM on a domain you stopped sending through unless you like mystery selectors in DMARC reports.
I would not put SES SMTP into Gmail Send as on day one. Sandbox will refuse a test to any inbox you have not verified as an identity, and that looks like Gmail is broken. Authenticate, request production (or verify the test address), then point Gmail at SES if you still want the inbox UI. For app mail, call SES from the app and leave Gmail out of it.
DMARC without locking yourself out
Once SPF and DKIM pass on real mail, add:
v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.comdmarc@ is just another ImprovMX alias. Read a week of reports before you move to quarantine or reject. I have watched people set p=reject the same afternoon they added SPF, then wonder why a leftover Google include started eating their own mail.
Keep aspf and adkim relaxed until the reports are boring. Alignment is the part that bites when you send from hello@ and DKIM is signed on a subdomain you forgot to match.
What I tried that was a waste of time
Gmail SMTP "Send as" as the whole product. It works until it does not. The "via Gmail" badge is the honest version of the header. ImprovMX will still forward the inbound copy. Outbound is Gmail's problem, and Gmail does not care about your domain the way a relay you authenticated does.
A second SPF record for the new vendor. Looks tidy in the DNS UI. It is invalid. Merge.
Brevo API key in the SMTP password field. The dialog accepts it. The relay does not. SMTP key, from the SMTP tab.
SES in sandbox, then a test to my personal Gmail that I never verified as an identity. Silent failure, or a bounce that looks like reputation. Verify the test inbox, or get production access first.
Mailing lists from hello@. Support and a blast share reputation. If I ever need a list, it gets a subdomain and a tool that is actually a list tool. This stack is replies and transactional copies.
Limits I live with
Forwarding is still not a mailbox. There is no IMAP on the domain. Sent mail lives in Gmail's Sent. If a second human needs their own Sent folder, that is Zoho (or paid Workspace), not a better SMTP password. I said this in the comparison. It is still true after you fix sending.
Google can change "Send as." If that path dies, ImprovMX Light SMTP or a real mailbox is the backup, not a second Gmail trick.
Brevo's 300/day is shared. A leaky contact form and your replies compete. Cap the form.
Do not mix ImprovMX MX with Google Workspace MX "for sending." One MX set. Sending is SPF and DKIM, not a second mail host.
FAQ
How do I send email from a custom domain for free?
Forward inbound mail with ImprovMX or Cloudflare Email Routing. Send through a free SMTP relay (Brevo is 300/day) using Gmail's Send as dialog, or through Zoho's free mailbox if you want sending inside a hosted inbox. Gmail's own SMTP is free and a deliverability risk.
Does ImprovMX send email on the free plan?
No. Free is receive-only. Sending on ImprovMX starts at Light (25 SMTP emails/day). The workaround is Gmail Send as pointed at someone else's SMTP, which is what this page sets up.
Why does Gmail Send as show "via Gmail"?
You authenticated with smtp.gmail.com. Recipients see Gmail as the real sender. Point Send as at Brevo or SES, with the domain authenticated there, and that badge should go away.
Can I use Amazon SES instead of Brevo?
Yes, after the domain is verified and the account is out of the sandbox (or you only mail verified identities). SES is the better long-term relay for app mail. Brevo is the faster free path for a human sitting in Gmail.
Do I still need ImprovMX if I send through Brevo?
Yes, if you still want hello@ to land in Gmail. Brevo and SES send. They do not replace MX. Leave ImprovMX's MX alone. Only merge SPF and add the sender's DKIM.
What to do next
Get inbound working first. MX, one SPF record, a test from a second account. That is the ImprovMX setup.
Then authenticate the domain at Brevo, merge include:spf.brevo.com into that SPF record, add DKIM, and point Gmail Send as at smtp-relay.brevo.com. Send the next reply to an address that is not Gmail.
If you would rather pay one vendor than add Brevo, ImprovMX Light is the $50/year line.


