Ok, very few words and some diagrams to put a beam of light on mail delivery in WordPress.
Three actors participate in the delivery act: WordPress, PHP, and the server. If those terms are not crystal clear to you, and you have email delivery problems, ask a technician.
I’m analyzing a basic WordPress installation, without any SMTP plugin or plugins that redirect the emails to be delivered by external systems.
The diagram shows you the main points of failure and those failures DO NOT give feedback (usually).
Typically a diagnostic tool (for example the test feature of an SMTP plugin when configured to use the standard delivery method) can report some information. Note that WordPress has not a diagnostic feature for email delivery, so you need a plugin or like.
wp_mail() function should never fail on its own.
PHP problems, like the
mail() function disabled by the provider (yes there are providers that disable it!), should be reported by diagnostic tools.
Server problems are usually invisible, the only effect is the missing email in the recipient mailbox. Contacting the authors of the plugin “not able” to send emails is a waste of time: the first request should be addressed to the provider.
Anyway, there is a test you can try as the first step: create a WP user with a valid email you can check, and verify if the new user email is received. In this case, WP is able to send messages and the problem could be in the plugin.
When you determine the problem could be in the plugin, you should check if the plugin lets you change the sender address (from firstname.lastname@example.org to something else) and if you set it to something different.
Try to set it to the default value and test again. Setting the sender address to @gmail.com or another big provider is a bad idea. Stick to your domain.
Some server-level spam filters can block emails by the content or the subject. I’ve seen many times that behavior and just changing the subject magically makes the message appear again.
Last and worse, the receiving system can refuse your messages. I’m not talking about putting them in the spam folder, the message is actually thrown away, dropped, destroyed, or atomized.
You can easily diagnose this problem by sending test messages to different recipients on different providers. There are many reasons to ignore your message. Bad SPF records in your DNS, IP or domain blacklisted, and so on.
With a plugin that extends the
wp_mail() function, you can try to change the “return path” which is an email address where error messages could be returned (yes, I know, “return path” is not the right term, “sender” is the right one).
Remember, the email environment is almost always asynchronous, and errors are not reported immediately, but can be signaled with an email where the body has some diagnostic information (for example “we refused your message because we consider you a spammer”).
Those kinds of emails are named DSN (Delivery Status Notification) and they’re not sent to the “from” address. Without a plugin to force the “return path”, they’re lost.
When you get a DSN message, ask an expert to analyze it (even if carefully reading the content, the error explanation is usually easy to spot!).
Deliberately I simplified the terminology to avoid the “sender”, “return path”, “from” terms confusion.
Have a nice delivery error tracking!