Why your WordPress invoices (and other emails) keep landing in recipients’ spam, and how to fix it

Picture this. You wrap up a project, send the invoice, and then nothing. A week goes by. Then another. You start to get that low, simmering panic about whether this client is ever actually going to pay you.

So you send a follow up. Probably a slightly stiff one, because you’re annoyed now. And the client writes back, genuinely confused, saying they never got the first invoice.

You go digging. And there it is, sitting in their spam folder. Or worse, it turns out your site never sent it at all. It just quietly failed and didn’t bother telling you.

I’ve been on both ends of this and it’s miserable. You look unprofessional, the client gets a weird first impression of you, and the whole time it wasn’t anybody’s fault. It was one default setting that almost nobody thinks about.


Why this happens (it’s genuinely not your fault)

Here’s the part that surprises people. WordPress sends email through a built in PHP function called mail(). And that function is about as trustworthy as a stranger handing you a letter with no return address on it.

It sends from your web server, which usually has no email reputation to speak of. There’s nothing proving the message actually came from your domain. So when it shows up at Gmail or Outlook, the spam filter takes one look and goes “yeah, no.”

Sometimes it lands in spam. Sometimes it gets silently dropped and never arrives anywhere at all. Either way, nobody tells you it happened.

For a contact form, that’s annoying. For your actual business, it’s a real problem. Freelance Studio sends invoices, proposals, contracts, booking confirmations, and payment reminders. Those are exactly the emails you cannot have vanishing into a void.


The fix, in plain English

Good news: this is very fixable, and you only have to do it once. There are 3 pieces to it.

1. Route your email through a real sending service

Instead of letting WordPress use that sketchy mail() function, you install an SMTP plugin. It takes your outgoing email and hands it off to a proper email service that actually knows how to get messages delivered.

I personally use GoSMTP. It’s lightweight, it sets up in about 2 clicks, and I get the Pro version free through my NameCheap hosting, which is a nice bonus. The free version covers what most people need anyway.

There are a few good options here, though, and the right one mostly comes down to whether you want free logging, paid support, or the fewest possible bells and whistles. Here’s a quick rundown so you can pick what fits:

PluginPricingProsCons
GoSMTPFree;
Pro paid (sometimes bundled free with hosting like NameCheap)
Lightweight, 2-click setup, no pushy upsellsLogging and failure alerts are Pro only; newer, smaller name
FluentSMTP100% freeLogging, backup sending, and every provider free with no paywallNo paid support tier if you get stuck
WP Mail SMTPFree;
Pro from $49/yr (renews around $99/yr)
Most popular, polished, great docs, widest provider supportEmail logging and backups are locked behind Pro
Post SMTPFree;
Pro from $99/yr
Most generous free tier (free logging and auto-failover), strong diagnosticsPlainer interface; Pro costs more upfront

Any of these will solve the actual problem. If you’re on NameCheap like me, GoSMTP Pro being bundled in makes it an easy pick. If you want everything (including logging) for free, FluentSMTP and Post SMTP are both excellent. And if you want the most hand-holding and don’t mind paying, WP Mail SMTP is the safe bet.

2. Sign up for an email service, or connect your own Gmail

Think of the SMTP plugin as the pipe. You still need something on the other end doing the real sending, and you’ve got two ways to go here.

Option 1: a dedicated email service. This is a service whose entire job is getting email delivered, so it already has a strong reputation with Gmail and the rest. Brevo is my pick for getting started. The free plan sends up to 300 emails a day, which is plenty for a freelance business (you’re sending invoices, not running a newsletter empire). If you want premium deliverability, Postmark is excellent. And if you’re ever sending huge volume and want it cheap, Amazon SES is the budget option, though it’s fiddlier to set up. Freelance Studio supports Brevo and Postmark directly, so if you’re using the plugin those two are the easiest path.

Option 2: use your own Gmail or Google Workspace account. Every plugin in the table above can connect straight to a Google account and send through it. If you already pay for Google Workspace, this costs you nothing extra and your email goes out from your own domain, which looks more professional to clients. A regular free @gmail.com address works too, just know that Gmail caps how many emails you can send per day (a few hundred on a free account), and a Workspace address on your own domain will always read better than yourname@gmail.com.

One small note: GoSMTP’s built-in Google connector is a Pro feature, but you can still point the free version at Gmail using a standard SMTP connection and an app password.

3. Prove the email is really from you

This is the piece that does the heavy lifting, and it’s also the one people skip. You add a few small records to your domain’s DNS settings, called SPF, DKIM, and DMARC.

In plain terms, those are little notes that tell Gmail “yes, this service has my permission to send email as me.” Once they’re in place, your messages stop looking suspicious and start landing in the inbox where they belong.

It sounds technical, and the first time you do it your eyes might glaze over a little. But your email service walks you through the exact records to copy and paste. You just have to have access to your domain settings through your hosting site.

Tip: Google your “hosting provider + edit DNS settings” and you’ll most likely find a step-by-step guide on how to add these records.


How to tell if you have this problem right now

Quick test. Send yourself an invoice from your site to a Gmail address you own. Then check. Did it arrive? Did it land in spam? Did it show up at all?

If it went to spam or never came, you’ve got the mail() problem. And if you want to get a little nerdy about it, send a test message to mail-tester.com. It grades your setup out of 10 and tells you exactly what’s missing.


Two small habits that keep it working

  • Use a real from address at your own domain, like hello@yourstudio.com, instead of a gmail or yahoo address. Trying to send “as” Gmail through a different service is its own red flag to spam filters.
  • And once a month, glance at your email logs (GoSMTP Pro, FluentSMTP, and Post SMTP all keep one for you). It takes about 10 seconds and it’s how you catch a delivery problem before a client does.

Getting your invoices to actually land is one of those deeply unglamorous things that quietly makes you look more put together. Nobody is ever going to compliment you on your SPF records. But they will pay the invoices they actually receive.

I kept losing my CSS tweaks in the inspector, so I built something to catch them

About the author

Jenny

Jenny is an art director and web designer who has been freelancing since she got out of school. She built Freelance Studio because she got tired of losing her business data every time a platform shut down. She also coded her first website on Neopets. Don't judge her.

Leave a Reply

Your email address will not be published. Required fields are marked

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}
Freelance Studio
Success message!
Warning message!
Error message!