The form says thank you, and then nothing ever reaches my inbox.
Free plugin · v2.7 · No account
Hosts have spent years switching off the PHP mail() function WordPress relies on, because spammers loved it. Custom SMTP replaces it with the provider you already have, from Gmail or Brevo to your host’s own SMTP server, keeps a record of every message, and warns you the day sending breaks.
Sound familiar?
None of them is a broken theme, a broken form plugin or a broken WordPress. They are all the same problem wearing four different costumes.
The form says thank you, and then nothing ever reaches my inbox.
Customers keep telling me their order confirmation went to spam. Or nowhere.
Someone asked to reset their password and the email simply never came.
It worked for two years. I changed nothing. Now half of it disappears.
The cause is the same every time. WordPress asks the server to post the message, the server posts it from an address your domain never authorised, and the receiving side treats it as forged. Nothing bounces, nothing errors, nothing appears anywhere. The message is simply gone, and your site cheerfully reports success.
Setting it up
The order matters here, which is why these are numbered. Nothing else in the plugin needs to be done in sequence.
Plugins, Add New, search for Custom SMTP, activate. From that moment every email your site sends is being recorded, before you have configured anything at all.
Settings, then Custom SMTP. Choose your provider from the list and the server address, port and encryption fill themselves in. Enter the username and password it gave you.
One button tests the connection, another sends a real email. When something is wrong, the error comes back as a sentence you can act on rather than a numeric code.
Your hosting company almost certainly gave you one with your plan, at no extra cost. Gmail, Outlook, Brevo and the others work too, and several are free at the volume a small site sends.
Email log
This is the part people keep the plugin for. Every message your site sends is listed with its status, and a failure tells you exactly why it failed instead of vanishing.
| Date sent | Recipient | Subject | Status | |
|---|---|---|---|---|
| 2026-07-27 14:02 | client@example.com | Your order #1481 has shipped | Sent | Preview |
| 2026-07-27 13:58 | newsletter@example.org | Password reset requestedSMTP Error: could not authenticate. 535 5.7.8 Bad credentials | Failed | Resend |
| 2026-07-27 13:41 | contact@studio.fr | Nouveau message depuis le formulaire de contact | Sent | Preview |
| 2026-07-27 13:12 | accounts@example.com | Invoice 2026-0431 attached | Sent | Preview |
Open any message and see it as the recipient received it, then download it if you need to keep a copy.
Correct whatever broke and send the failed message again from its own row. Nobody has to fill in the form a second time.
Search by recipient or subject, filter by status, export the result to a spreadsheet when someone asks for proof.
Records older than your retention setting are deleted once a day, automatically. Thirty days by default, anything from one to 365.
New in v2.7
WordPress emails the admin about password resets, new users, automatic updates and comments, whether you want that or not. Until now the fix was code in functions.php. Now it is a row of switches.
Agencies & freelancers
Email is the support ticket that never ends, because the client experiences it as “your site is broken” and you have nothing to show them. That is the problem this plugin was actually shaped around.
Search the log by their address. Either you show them the timestamp and the delivery, or you see the exact error and know it is yours to fix. The conversation ends in a minute instead of three rounds of email.
Fix the credentials, then resend the message that failed straight from the log. Your client never finds out that their customer’s invoice was stuck.
Push the configuration in through environment variables or constants and every site in your portfolio is identical, locked, and impossible for a client to break by clicking around the admin.
No banner, no upgrade nag, no trial countdown in an admin you are responsible for. Your client is never shown a screen inviting them to buy something behind your back.
Alerts fire on a burst of sending or on a run of failures, by email and by webhook into Slack or Teams. You find out when the shop stops confirming orders, not when the client notices a week later.
No third-party service in the path, so no processor to declare, no subscription to expense per site, and no account to hand over the day the client leaves you.
The short version
Most of the reasons people move to Custom SMTP are on this list rather than on the feature list, so it is worth being explicit about them.
Open source, GPLv2, and free forever. The full plugin is the free plugin. The code is public on WordPress.org, anyone can read it, audit it or fork it, and there is no paid edition waiting behind a banner. There never will be. Everything above follows from that.
Your data
An email log holds personal data, so it is fair to ask exactly where it goes and how long it stays. Here is the whole answer.
Records are written to one table in your own WordPress database, next to everything your site already stores. Nothing is copied anywhere else, and the plugin makes no outbound request other than to the mail provider you configured, plus your own webhook if you chose to set one up.
Honest advice
This plugin fixes how your site sends. It cannot make the receiving side trust your domain, and no plugin can. Three things decide that, and all three live in your DNS.
A short line in your DNS naming the servers permitted to send email using your domain. Your provider publishes the exact value to add. Without it, a correctly sent message can still be treated as suspicious.
A signature added to each message and checked against a key in your DNS. Most providers generate the record for you and ask you to paste it in once. It is the single most effective item on this list.
A policy telling receiving servers how to treat mail that fails the checks above, and where to send reports about it. Start in the permissive mode your provider recommends, read the reports for a fortnight, then tighten.
None of this needs the plugin, and we would rather say so plainly. What the plugin gives you is the log that tells you whether the problem is on your side at all, which is usually the first hour of the investigation.
Providers
Eleven presets ship with the plugin, and the last tile takes any server you like, including the one your hosting company gave you. Every preset stays editable field by field.
Gmail
smtp.gmail.com
TLS
Outlook
smtp.office365.com
TLS
Amazon SES
SESv2 or SMTP
IAM role
SendGrid
smtp.sendgrid.net
TLS
Mailgun
smtp.mailgun.org
TLS
Brevo
smtp-relay.brevo.com
TLS
Postmark
smtp.postmarkapp.com
TLS
Mailjet
in-v3.mailjet.com
TLS
Zoho
smtp.zoho.com
TLS
Yahoo
smtp.mail.yahoo.com
TLS
iCloud
smtp.mail.me.com
TLS
Your host
server, port, login
your call
And on the WordPress side, everything. WooCommerce, Contact Form 7, WPForms, Gravity Forms, membership plugins, booking plugins, password resets, new user notifications. If it sends email through WordPress, it goes through Custom SMTP and it appears in the log.
Questions
Everything here is in the free plugin. No pro version, no account, no call home.
No. You need the server address, username and password that your email provider or hosting company gave you. Pick your provider from the list, paste those two values, send a test. If the test fails, the plugin tells you which of the two is wrong.
Yes. Shared hosting is where it is used most, and it is exactly the case where the default WordPress behaviour fails most often. It needs WordPress 6.0 or newer and PHP 7.4 or newer, which any current hosting plan provides.
Yes, and with everything else. The plugin takes over the single function that all of WordPress uses to send email, so WooCommerce, Contact Form 7, WPForms, Gravity Forms and any other plugin are covered without configuring them one by one.
Encrypted in your own database, with a key derived from your WordPress salts. It is never displayed again after you save it, and it never leaves your server. If you would rather store no password at all, the Amazon SES option can authenticate without one.
One small row is written per email, on a site that sends a few dozen a day. Records past your retention setting are deleted daily, and message bodies are not stored unless you ask for them. On a busy site you can lower the retention or turn logging off entirely.
Yes, GPLv2, on the WordPress.org repository. There is no paid version to upgrade to, which also means there is no feature deliberately held back to make you want one.
Containers, a read-only filesystem, multisite, Amazon SES with an IAM role and no stored keys, configuration pushed in from the environment, hooks to extend the logging. All of that has its own page, so it stays out of the way here.
Install it, pick your provider, send yourself a test. It takes about as long as reading this page.