Skip to Content

WordPress and Email: Why wp_mail() Is Not Enough

Transactional email that actually arrives

WordPress sends email via PHP's mail() function by default. It technically works, but the mail almost certainly ends up in spam. The reason: your server probably has no SPF, DKIM, or DMARC configured, and shared hosting IPs are often blacklisted.

SMTP plugin

WP Mail SMTP or FluentSMTP. Connect WordPress to an external email service actually built to deliver email. Install, configure SMTP server, port, authentication. Test with the test mail function. Takes five minutes.

Transactional email services

Mailgun, Postmark, Amazon SES, Brevo (formerly Sendinblue). They handle SPF and DKIM for you, have high delivery rates, and cost next to nothing for normal volume.

Postmark has the best delivery rate in our tests. Mailgun is cheapest for high volume. Amazon SES literally costs pennies per email but requires more configuration.

What WordPress sends

More email than you think. Password resets, new users, WooCommerce orders, form notifications, comments. If just one of these fails (a customer not getting their order confirmation), that's a support ticket.

Email templates

WooCommerce emails can be customized under WooCommerce → Settings → Email. Colors, logo, footer. But don't go overboard with design. Simple, readable text converts better than advanced HTML templates in most cases.

In summary: connect WordPress to a real email service via SMTP. It's one of those things that should be standard with every installation but never is.

Build a Custom Gutenberg Block with React
From create-block to publication