Password reset emails just vanish. WordPress says to check my inbox, and nothing arrives, not even in the spam folder.
wp_mail() returns true as soon as PHPMailer hands the message to PHP mail() and the local MTA accepts it. If that MTA has no route out, or the receiving side drops the mail because it is unsigned and its envelope belongs to a shared server, nothing anywhere in WordPress records the loss. The wp_mail_failed action only fires when PHPMailer throws.
The fix
Install FluentSMTP or WP Mail SMTP, connect a provider, and check the plugin's log for that specific send. If the log shows a delivery and the mailbox still has nothing, the problem is at the receiver, so run a real send to an Unspam seed address and read the authentication results.
Our WooCommerce order confirmations go to spam for Gmail customers but arrive fine at our own Outlook inbox.
Your own mail server usually allowlists your domain or your server, so internal testing tells you nothing. Gmail applies the sender guidelines: SPF or DKIM at minimum, valid forward and reverse DNS on the sending IP, TLS in transit. PHP mail() from shared hosting fails the first, often fails the second, and gives you no visibility into either.
The fix
Route WooCommerce mail through a provider, set the From address under WooCommerce > Settings > Emails to a mailbox on your own domain, and confirm on a real order that DKIM signs with your domain. Never test deliverability by sending to a mailbox on the same infrastructure you send from.
I installed WP Mail SMTP, the test email says success, and real form notifications still land in spam.
The Email Test tool sends its own message using the plugin's From Email. Your form plugin sets its own From address in the notification settings, so unless Force From Email is checked, the real notification goes out under a different sender, possibly one the provider has not verified and one your DNS records do not cover. Same site, two different sending identities.
The fix
Check Force From Email under WP Mail SMTP > Settings, or set the form notification's From Email to the same verified address, and move the visitor's address into Reply-To with a smart tag. Then submit the form for real with an Unspam seed address and the Test ID in the message field.
Contact Form 7 worked for years, then Gmail started bouncing everything with a 5.7.26 error.
The form is putting the visitor's address in the From header, so your server sends mail claiming to be from gmail.com. Google's sender requirements tightened in February 2024, and unauthenticated mail can now be marked as spam or rejected outright with 5.7.26. Nothing changed on your site; the bar moved.
The fix
Put an address on your own domain in From, and the submitter's address in Reply-To, which is what WPForms and WooCommerce both document. Then authenticate that domain properly through an SMTP provider so the From you now use actually passes SPF or DKIM alignment.
Moved the site to a new host and email stopped completely. Nothing in the logs, nothing in the plugin.
Outbound port policy is per platform and it does not travel with your files. Kinsta blocks outbound port 25 and offers 587, 465 and 2525. WP Engine does not allow port 25, allows 587 and 465, and recommends 2525. DigitalOcean blocks 25, 465 and 587 on Droplets by default, including traffic via a Reserved IP, and AWS throttles port 25 from EC2 by default. A blocked port surfaces as a connection timeout, not as a deliverability problem.
The fix
Ask the host in writing which outbound ports are open for your plan, set the matching port and encryption pair in your plugin (TLS with 587, or SSL with 465), and if everything is blocked switch to a mailer that reaches the provider over HTTPS instead of SMTP.