WordPress password reset email not sending? Find the layer that stopped it.
A password reset can fail before mail is created, inside WordPress's reset logic, at the shared mail transport, at the receiving server, or after the destination accepts the message. Work through those layers in order instead of changing SMTP and account settings at the same time.
The fast split
Account or reset error: fix the WordPress reset flow before investigating SMTP.
WordPress says the email could not be sent: test the shared wp_mail() transport and SMTP configuration.
Request succeeds but the user sees no message: inspect provider acceptance, bounce data, authentication, and mailbox placement.
1. Start with what the reset form actually reports
WordPress first resolves the username or email address before it tries to send a reset message. If the request fails because the account cannot be found or another reset-specific error is returned, that is not an SMTP problem yet. Fix the account or reset-flow error before changing mail settings.
2. Treat the WordPress mail error as a useful boundary
In the standard reset flow, WordPress builds the reset notification and passes it to wp_mail(). If wp_mail() returns false, WordPress reports that the email could not be sent and that the site may not be configured correctly for email. At that point, test the shared WordPress mail transport instead of debugging the reset form itself.
3. Check whether other WordPress email works
Send a test from your active mail integration or trigger another transactional message such as an admin notification. If those fail too, the shared wp_mail() or SMTP path is the likely problem. If they succeed while password reset mail does not, stay focused on reset-specific customization, filters, plugins, and the recipient account.
4. Look for code or plugins that modify the reset notification
WordPress exposes hooks that can change the reset email or prevent it from being sent. Authentication, membership, security, white-label, and custom-code layers can therefore make reset mail behave differently from generic WordPress mail. Review those customizations before assuming the SMTP provider dropped the message.
5. Use an explicit authenticated SMTP transport
Password reset mail ultimately uses WordPress's normal mail stack. Route that stack through an authenticated SMTP service so the final handoff has explicit credentials, sender rules, and observable errors instead of depending on the web server's default mail behavior.
6. Keep the sender identity stable and authorized
Use a From address on a domain your sending service is configured to send for. A working SMTP login does not automatically authorize every possible From domain. Avoid changing the sender identity while debugging unless that change is the specific thing you are testing.
7. If WordPress hands off the message, inspect the provider result
A successful wp_mail() call means WordPress handed the message to its configured mailer; it does not prove the destination accepted or placed it in the inbox. Check for SMTP rejection, bounce data, and sending-domain state before treating the problem as spam placement.
8. If the recipient accepted it, check spam placement separately
Once the receiving system accepts the reset email, missing inbox placement becomes a different problem. Review SPF, DKIM, DMARC, return-path alignment, sender reputation, and the delivered message itself. Authentication matters, but it does not guarantee inbox placement.
9. Retest the real password reset flow
After changing one layer, request a fresh reset for a controlled user account and follow that exact message through WordPress, the SMTP provider, and the destination mailbox. A generic SMTP test is useful, but the real reset workflow is the final proof that the customer-facing path works.
Make the WordPress mail handoff easier to inspect with Parcel Wing
Parcel Wing can provide the authenticated SMTP transport behind WordPress password-reset mail while keeping sending-domain health visible. Verify the domain, connect WordPress over SMTP, prove the shared mail path, then request a fresh reset for the real account you are testing. Parcel Wing can make transport and authentication state explicit; it cannot guarantee inbox placement.
If the reset message is accepted but filtered, use the WordPress spam-placement checklist rather than changing the reset workflow again.
