If you run a WordPress site with open registration, emails that confirm new accounts or reset passwords can fail to arrive, leaving users locked out and you with support tickets. The fix usually involves checking your hosting mail setup, installing an SMTP plugin, or updating your site URL settings—here’s how to diagnose and resolve each cause.
Why WordPress Emails Fail
WordPress sends emails through the wp_mail() function, which by default uses PHP’s mail() function. That function relies on your web server’s local mail transfer agent (MTA), such as Sendmail or Postfix. Many shared hosting servers have poorly configured MTAs, or they block outbound port 25 to prevent spam. As a result, the email is marked as sent (WordPress has no way to know it failed), but it never reaches the recipient’s inbox—or it lands in spam.
Another common cause is that your site’s “WordPress Address” or “Site Address” in Settings > General contains localhost or a temporary domain. The links in the email are generated from those URLs, so even if the email arrives, the activation link points to a non-existent page. Also, if you’ve moved from HTTP to HTTPS, the old URLs can linger in cached emails.
How WordPress Registration Emails Work
When a new user registers, WordPress fires the user_register hook, which triggers wp_new_user_notification(). That function sends two emails: one to the admin notifying them of the new user, and one to the user with a password reset link (if admin-created users) or a password setup link (if self-registered). For self-registration, the email contains a link to wp-login.php?action=rp&key=... that lets the user set their password.
If email delivery fails, the user never gets that link and cannot log in. WordPress does not store a copy of the email, so there’s no way to resend it from the dashboard—you must either use a plugin to resend or manually reset the user’s password from the Users screen.
Quick Fixes to Try First
- Check spam folder—sometimes the email is delivered but filtered. Ask the user to look in Spam or Junk.
- Test with a different email address—some providers (like certain free email services) block emails from unknown IPs. Try a Gmail or Outlook address.
- Resend the email—install a plugin like “WP Mail SMTP” or “Check & Log Email” to see the log and resend.
- Verify your site URL—go to Settings > General and ensure both URL fields use your real domain (e.g.,
https://example.com), notlocalhostor an IP. - Update permalinks—go to Settings > Permalinks and click “Save Changes” to flush rewrite rules, which sometimes fixes broken links in emails.
Using an SMTP Plugin (The Reliable Fix)
The most dependable solution is to send WordPress emails through a real SMTP server instead of PHP’s mail function. SMTP (Simple Mail Transfer Protocol) is the standard for sending email, and it requires authentication, which dramatically improves deliverability.
Popular plugins include WP Mail SMTP, Post SMTP, and Easy WP SMTP. After installing one, you’ll need SMTP credentials. Options include:
- Your hosting provider’s SMTP server—often
smtp.yourdomain.comwith your email account’s username/password. - A free SMTP service like SendGrid’s free tier (100 emails/day), Mailgun’s trial, or Gmail’s SMTP (requires an app-specific password if you use 2FA).
- A transactional email service like Amazon SES or Mailgun (paid but reliable).
In the plugin settings, enter the SMTP host, port (usually 587 for TLS or 465 for SSL), and your credentials. Test the connection with the plugin’s built-in tester. Once it sends successfully, your registration emails will go out through that service.
Common Problems and Their Specific Fixes
Emails Go to Spam
Even if emails arrive, they may land in spam. This often happens because your domain lacks SPF and DKIM records. These are DNS records that verify your domain is allowed to send email. Your hosting provider or email service can guide you to add them. For example, if you use SendGrid, you’ll add a TXT record with their SPF value. Without these, email providers treat your messages as suspicious.
Emails Not Sent at All (No Log)
If no email appears in the logs (using a logging plugin), the PHP mail function may be disabled or the server’s mail service is down. Check with your host—some disable mail() for security. In that case, SMTP is your only option.
Activation Link Points to Wrong URL
If the email arrives but the link goes to a 404 or to a staging site, your site URL is wrong. Update it in Settings > General. Also, if you’ve recently migrated, search the database for old URLs using a plugin like “Better Search Replace” and replace them with the new domain.
Emails Work for Admin but Not Users
That’s unusual, but it can happen if a plugin or theme modifies the notification email only for admins. Try deactivating all plugins and switching to a default theme (like Twenty Twenty-Four) to see if the issue persists. If it resolves, re-enable plugins one by one to find the culprit.
How to Test Email Delivery
To isolate the problem, use a plugin like “Check & Log Email” to send a test email to any address. It will show you the response from the server (e.g., “Mail sent” or an error). If you see “Mail sent” but the email never arrives, the issue is likely spam filtering or server reputation. If you see an error, the PHP mail function is broken.
Another test: create a simple PHP file with <?php mail('you@example.com','Test','Body'); ?> and run it from your browser. If that fails, your server cannot send mail at all. But be careful—always delete the test file afterward.
When to Use a Transactional Email Service
For high-traffic sites or those sending many registration emails, a dedicated transactional email service is worth the cost. They offer better deliverability, analytics, and webhooks to track opens and bounces. Services like SendGrid, Mailgun, and Amazon SES are popular. They require you to verify your domain and set up DNS records. Once configured, you integrate them via an SMTP plugin or their API.
Costs vary: SendGrid’s free tier includes 100 emails/day forever; Mailgun has a trial with 100 emails/day; Amazon SES charges $0.10 per 1,000 emails. For most small sites, the free tier is enough.
Frequently Asked Questions
Why did WordPress stop sending registration emails after I moved hosts?
Moving hosts often changes the server’s mail configuration. The new host may have a different MTA or may block port 25. Your site URL might also be temporarily different during migration. Update your URLs and test with an SMTP plugin.
Can I resend a registration email without a plugin?
No, WordPress doesn’t have a built-in resend option. You can manually reset the user’s password from the Users screen, which sends a password reset email. That’s the simplest workaround.
Why do emails arrive but go to spam for some users?
This is usually a domain authentication issue. Add SPF and DKIM records to your DNS. Also, avoid using free email addresses for your site’s “From” address—use an address from your own domain.
Is it safe to use Gmail SMTP to send WordPress emails?
Yes, but you must enable “Less secure app access” or use an app-specific password if you have 2FA. Gmail limits sending to 500 emails per day, which is fine for most small sites. However, emails may show “via gmail.com” in the recipient’s inbox.
What if the SMTP plugin test email works but registration emails still fail?
Check the plugin’s logs for errors. Sometimes a caching plugin or security plugin interferes with the email function. Also, ensure you’ve configured the “From” name and email correctly—some SMTP services reject emails with a mismatched sender.
Related
Method: the standard formula for this calculation, rounded as each result states. See how the calculators work or report an error.
More cards in this drawer
- Campus Tech Innovation Hubs: What They Are
- Poco C51 Airtel Prepaid Locked Variant India?
- Jenkins vs GitHub Actions: Which CI/CD Fits Your Team?
- Turn Off Backup Encryption in iTunes?
- Shared VPS Hosting: Is It Better?
- Disk Defrag Pro: What It Does and Whether You Need It