WordPress usually stops sending emails because it relies on the web server's own mail function, which many hosts block or send without the SPF and DKIM authentication that Gmail and Outlook expect, so messages vanish or land in spam. A From address on a different domain, a switched-off form notification or a plugin conflict cause most of the remaining cases. The lasting fix is to send through an authenticated email service with an SMTP plugin, use a From address on your own domain, and test each email type.
Missing contact form emails mean lost enquiries, and missing password resets lock customers and staff out. This guide explains why it happens, the settings to check in the main form plugins, a diagnosis order that finds the cause quickly, and the fix.
#Why WordPress emails go missing
WordPress sends every email through one function, wp_mail(), and by default that function passes the message to the web server to deliver. The WordPress developer reference is clear that a true result "does not automatically mean that the user received the email successfully". When nothing is configured, WordPress also sends from wordpress@yourdomain unless a plugin sets another address.
Four causes account for most failures:
| Cause | What happens | How to spot it |
|---|---|---|
| Host blocks or limits mail | The server cannot send, or caps how many emails it sends | Nothing arrives at all, from any form or reset |
| No authentication | Email leaves the server without SPF or DKIM that matches your domain | Emails arrive in spam, or Gmail rejects them |
| From address on another domain | The form sends "from" a visitor's Gmail or your own Gmail address | Some messages arrive, others vanish, often by recipient |
| Plugin conflict or error | A plugin breaks the sending step or replaces the mailer | Started after an update or a new plugin |
Host blocks. Some hosts disable PHP mail on purpose, and cloud servers often block the ports used for sending. DigitalOcean, for example, states that SMTP ports 25, 465 and 587 are blocked on its Droplets and recommends a third-party email service. Our guide to SMTP settings and ports explains which ports are affected and why.
No authentication. Google's sender guidelines require everyone sending to Gmail to set up SPF or DKIM, and bulk senders need both plus DMARC. Mail sent straight from a shared server rarely passes these checks for your domain.
From address on another domain. If the From address is someone@gmail.com but the email comes from your server, Gmail can see your server is not allowed to send for gmail.com. Gravity Forms' documentation says the From address must be one your server is authorised to send for, such as an address on your site's domain.
Plugin conflicts. Two SMTP plugins both trying to take over the mailer, a security plugin blocking outgoing connections, or a fatal error during form submission all stop email. These often appear after updates; our article on what to do when a WordPress update breaks your site covers rolling back safely.
#Check your contact form plugin settings
Check the form's own notification settings before touching the server, because a switched-off notification or a typo looks exactly like a mail failure.
#Contact Form 7
Open the form and go to the Mail tab. Contact Form 7's documentation says the From field should be an address that belongs to the same domain as the website, otherwise it shows a configuration error. Put the visitor's address in a Reply-To line under Additional headers, not in From. If you use Mail (2) as an autoresponder, note that it is sent only when the main Mail is sent successfully.
#WPForms
In the form builder, go to Settings > Notifications and make sure Enable Notifications is on. Check the Send To Email Address for typos and stray spaces, and check any conditional logic. WPForms recommends a From Email on your site's domain, and advises against using the same address in From and Send To, which some providers treat as spam. Under WPForms > Settings > Email, its troubleshooting guide says to keep Optimize Email Sending off while you diagnose.
#Gravity Forms
Open the form, click Notifications, and check each notification's toggle is on and its event is valid. Gravity Forms shows a warning when the From Email does not use your site's domain; fix the address rather than hiding the warning. Use the Reply To field for the visitor's address, and avoid the same address in From and To.
#Fluent Forms
Open the form's Settings & Integrations, then Email Notifications. Check Send To (a fixed address, a form field or conditional routing) and, under the advanced options, set From Email to an address on your domain that matches your SMTP setup, with the visitor's address in Reply To.
#Password reset emails
Password reset emails use the same wp_mail() function as everything else, so if contact forms fail, resets fail too. Check three things specific to resets:
- The account's email address is correct. In Users, check the address on the account. Typos here are common.
- Security or login plugins. Some replace the reset flow or block it after failed attempts. Temporarily check whether the reset works with that plugin disabled on a staging copy.
- Spam and quarantine. Corporate mail filters often quarantine reset emails because they contain links. Ask the recipient to check spam and any quarantine portal.
On a WooCommerce store, customers use WooCommerce's own Reset password email, which can be switched off under WooCommerce > Settings > Emails. Our guide to WooCommerce emails not sending covers store emails in detail.
#A diagnosis flow that finds the cause
Work from the simplest check to the most technical, and change one thing at a time.
- Check spam and form settings
- Send a test from an SMTP plugin
- Read the plugin's log
- Check the mail service log
- Check SPF and DKIM
- Test for plugin conflicts
- Check spam and the form settings. Look in spam on the receiving side, then confirm notifications are on and the recipient is right.
- Install an SMTP plugin and send a test. If the plugin's test email arrives but form emails do not, the problem is in the form's notification settings, as WPForms' own guide notes.
- Read the log. An SMTP plugin's log or debug events show whether the email left WordPress and the error if it did not. FluentSMTP and Post SMTP log for free; WP Mail SMTP keeps the full log in Pro but records sending errors in its Debug Events.
- Check the mail service's activity log. If WordPress handed the email over, the service shows whether it was delivered, bounced or blocked.
- Check SPF and DKIM. In Gmail, open the received test, choose "Show original" and look for PASS on SPF and DKIM.
- Test for conflicts. On a staging copy, switch to a default theme and disable plugins other than the form and SMTP plugins, then turn them back on one by one.
If the log shows connection or login errors, our guide to SMTP errors explains each common message.
#The fix: send through an authenticated mail service
The lasting fix is to stop relying on the server and send every WordPress email through a dedicated service, using an SMTP plugin.
- Choose a sending service such as Brevo, Amazon SES, Postmark or your Google Workspace or Microsoft 365 account.
- Verify your domain with that service and add the DNS records it gives you, usually DKIM plus an SPF include. Edit your existing SPF record rather than adding a second one; our guide to setting up SPF, DKIM and DMARC explains how.
- Install one SMTP plugin. Our comparison of WordPress SMTP plugins covers WP Mail SMTP, FluentSMTP, Post SMTP and Easy WP SMTP, with step-by-step guides for WP Mail SMTP and FluentSMTP.
- Set a From address on your domain, and force it if other plugins set their own.
- Update each form so From is your domain address and Reply-To is the visitor's email field.
- Test every email type: each contact form, a password reset, a new user registration and, on a store, an order.
- Turn on logs and failure alerts so the next failure reaches you first.
#When to get help
Get help when you have worked through the checks and emails still go missing, when the problem started after an update and you suspect a conflict, or when the domain also carries staff email that you cannot risk breaking with DNS changes.
The SMTP and transactional email setup service covers the mail service, DNS, plugin and form settings, with every email tested. If a plugin conflict is behind it, WordPress plugin conflict fixes finds and resolves it without breaking the rest of the site, and website maintenance and support keeps updates and email checks on a regular schedule.
Frequently asked questions
Why is my WordPress contact form not sending emails?
The most common reasons are that the host blocks or does not authenticate PHP mail, the form's From address is on another domain, or the notification is switched off or misaddressed. Check the form settings first, then send through an SMTP plugin with a From address on your own domain.
Why are WordPress password reset emails not arriving?
Password resets use the same mail function as forms, so the same causes apply: unauthenticated server mail, spam filtering or a plugin conflict. Check the account's email address, check spam and quarantine, and connect an SMTP plugin with SPF and DKIM for your domain.
Can I use the visitor's email as the From address?
No, put the visitor's address in Reply-To and keep From on your own domain. Your server is not allowed to send for gmail.com or other domains, so mail "from" a visitor's address fails authentication and is filtered or rejected.
Does WordPress have an email log?
No, WordPress does not log sent emails by default. An SMTP plugin adds one: FluentSMTP and Post SMTP include logs free, and WP Mail SMTP includes a full log in its Pro plan.
Do I need SMTP if my host says PHP mail works?
It is still the better choice for any business site. An SMTP plugin sends through an authenticated service for your domain and gives you a log, while PHP mail gives you neither and its success result does not confirm delivery.
Sources
The facts in this article were checked against these pages, last reviewed 12 November 2026.
- wp_mail(), WordPress Developer Referencedeveloper.wordpress.org/reference/functions/wp_mail/
- Setting up mail, Contact Form 7contactform7.com/setting-up-mail/
- Troubleshooting form notification emails, WPForms docswpforms.com/docs/troubleshooting-email-notifications/
- Troubleshooting notifications, Gravity Forms documentationdocs.gravityforms.com/troubleshooting-notifications/
- How to set up admin and user email notifications, Fluent Forms docsfluentforms.com/docs/how-to-setup-admin-user-email-notifications/
- Why is SMTP blocked?, DigitalOcean docsdocs.digitalocean.com/support/why-is-smtp-blocked/
- Email sender guidelines, Google Workspace Admin Helpsupport.google.com/a/answer/81126
- Debugging sending issues, WP Mail SMTP docswpmailsmtp.com/docs/how-to-debug-email-sending-issues-in-wp-mail-smtp/




