WordPress not sending email: where it fails
WordPress normally hands messages to the server through PHP mail unless a plugin or host changes that route. Hosts may restrict it, and an unauthenticated web server may struggle to deliver to Gmail or Outlook. Messages can be rejected or filtered into spam while the website appears to work.
- Form sends
- wp_mail() uses the server's mail()
- No SPF or DKIM for your domain
- Spam folder or silently dropped
- Form sends
- SMTP plugin routes wp_mail()
- Provider signs it: SPF, DKIM, DMARC
- Inbox, plus a log you can check
The form never submits
A validation error, broken script or spam check can stop the message before email is involved. If the page keeps spinning or shows an error, investigate that first.
The server cannot send
A blocked connection, expired credential or rejected sender can stop the handoff. Match the sending log to the time of your test instead of repeatedly reinstalling the form.
The inbox filters it
The provider may accept a message that later lands in spam or quarantine. An accepted status is useful evidence, but someone still needs to check the destination.
The WordPress wp_mail reference explicitly distinguishes successful processing from successful receipt. Start with one labeled test, its time and its destination so you can follow the same message through each system.
↑ Back to topA working form protects your Google leads
Someone can find you on Google, compare your services and write a detailed request that never reaches your team. The immediate problem is the lost conversation after the visit. Fixing SMTP protects that contact path; it does not promise better Google rankings.
- Law firm websites reviewed
- 300
- No form in homepage or contact page HTML
- 27%
- Neither a form nor a tel: link
- 10%
These findings describe contact options visible in the audited HTML, not email delivery tests. They show why the contact route deserves attention before more traffic is sent to a site. A form that exists still needs its own delivery check.
Our WordPress web design hub connects these checks with the rest of the customer journey. The WordPress conversion guide covers what visitors need before they choose to contact you.
↑ Back to topChoose an SMTP plugin and mail provider
An SMTP plugin connects WordPress to a sending service; it is not the mailbox or service itself. WP Mail SMTP, FluentSMTP and Post SMTP are options to evaluate neutrally. Choose around your provider, required authentication and available logs, then keep one active mail-routing plugin.
A real business mailbox
An existing mailbox can suit a modest flow of inquiries. Use a business-owned account and confirm its sending rules, limits and recovery access before relying on it for website notifications.
A transactional service
Brevo, SendGrid, Mailgun, Amazon SES and Postmark are services to compare for automated messages. Check domain verification, account approval, delivery records and plugin compatibility before choosing.
SMTP or an API
Some plugin connections use the provider's API instead of SMTP. Both can provide an authenticated route; the important questions are who sends the message and how you trace a failure.
| Option | Difficulty | Reliability | Cost |
|---|---|---|---|
| Host mailbox | Low to medium | Host-dependent | Plan-dependent |
| Gmail / Workspace | Medium | Quotas apply | Account-dependent |
| Microsoft OAuth | Medium to high | Consent-dependent | License-dependent |
| Transactional | Medium | Built for alerts | Usage / plan |
Check the current plugin edition for the connection and logging you need. Provider fees and plugin licensing are separate decisions, and a paid plugin cannot repair an unverified domain by itself. Prefer a setup the business can access after a staff or agency change.
↑ Back to topWordPress SMTP Gmail: use the right login
For an eligible Gmail or Google Workspace account, manual SMTP uses smtp.gmail.com, port 587 with STARTTLS, the full email address and an App Password. Google's app sending guidance explains the available routes. Your ordinary Gmail password is not the credential to paste into WordPress.
Server: smtp.gmail.com
Port: 587
Encryption: STARTTLS
Authentication: enabled
Username: your full Google email address
Password: a dedicated App PasswordUse the account's authorized sender address. This is a settings example, not a working login.
An App Password requires 2-Step Verification and may be unavailable under account restrictions. Google prefers Sign in with Google where supported; see its App Password guidance. If that option is missing, use a supported OAuth connection or ask your Workspace administrator instead of weakening account protection.
Workspace SMTP relay is a separate option
A Workspace administrator can configure the SMTP relay for approved senders and the server's authentication method. It is not enabled by changing the SMTP hostname alone. Google documents the administrator setup in Workspace SMTP relay.
↑ Back to topMicrosoft 365: prefer an OAuth connection
Microsoft 365 is more complicated than entering a username and password. SMTP AUTH is often disabled through organization or mailbox settings, and security defaults can disable it too. Your administrator should review Microsoft's SMTP AUTH guidance before changing the account.
Prefer your plugin's Microsoft OAuth integration, with the required administrator consent, or an authenticated transactional service. For example, WP Mail SMTP's Microsoft mailer uses Microsoft's API. Confirm the required plugin edition and permissions before buying or authorizing it.
↑ Back to topSPF, DKIM and DMARC in plain words
SMTP authenticates your site's connection to the provider. Domain authentication helps the receiving inbox verify that the provider is allowed to represent your business. SPF lists senders, DKIM signs messages, and DMARC checks their relationship to the visible From domain.
Google's sender guidelines require SPF or DKIM for all senders to personal Gmail accounts, and SPF, DKIM and DMARC for bulk senders. Authentication helps smaller sites too, though it does not guarantee inbox placement.
Type: TXT
Name: example.com
Value: v=spf1 ip4:192.0.2.10 ~all192.0.2.10 is a documentation-only address. Use your provider's actual instructions and merge authorized senders into one SPF record; do not publish this sample.
Type: TXT
Name: _dmarc.example.com
Value: v=DMARC1; p=none; rua=mailto:dmarc@example.comReplace the domain and report mailbox. A p=none policy requests reports; it does not ask inboxes to reject impersonation.
Get DKIM records from the actual sending provider, including its selector and key or CNAME targets. Do not invent a key or replace unrelated DNS records. Have the person responsible for business email review changes so the website repair preserves existing staff mail.
↑ Back to topWordPress not sending email: the 15-minute fix
Treat 15 minutes as a target for a straightforward setup with approved accounts, DNS access and credentials ready. Domain verification, provider approval or Microsoft consent can take longer. Before changing anything, save the current settings and take a recoverable backup.
- Step 1
Identify one missing message
Submit a labeled test and record the page, time and destination. Check the form recipient, existing entries and spam folder so you know whether the failure starts before or after the sending attempt.
- Step 2
Connect one authenticated provider
Configure one mail-routing plugin with your business mailbox or transactional account. Use the provider's supported SMTP, OAuth or API method, and deactivate overlapping routing plugins after saving their settings.
- Step 3
Verify the sender domain
Publish the provider's required DNS records and wait for verification. Set an authorized From address, and put the visitor's validated email in Reply-To so staff can answer them without impersonating their domain.
- Step 4
Send a plugin test email
Send a clearly labeled test to controlled Gmail and Outlook inboxes where possible. Check inbox, spam and quarantine; record any provider rejection rather than treating a green plugin status as delivery proof.
- Step 5
Inspect authentication headers
Open the received message's original or headers and inspect Authentication-Results for SPF and DKIM pass. Check DMARC and alignment with your sender domain; investigate failures before calling the setup complete.
- Step 6
Enable useful logs and entry storage
Record sending status and provider identifiers through the plugin, provider or suitable logging tool. Enable form-entry storage separately if needed, restrict who can read it and choose a retention period for messages and attachments.
- Step 7
Submit the real form again
Test the public form on a phone, including each language and notification route. Confirm the staff inbox, stored entry and any visitor confirmation; test replying to the visitor, then record the working configuration and owner.
Contact Form 7 not sending email: check routing
If your WordPress contact form is not sending email but the plugin test arrives, inspect the form's notification settings. Check the To address, enabled notifications, field tags and conditional routing. Contact Form 7's mail setup documentation explains the sender and additional headers.
To: sales@example.com
From: Website <website@example.com>
Reply-To: [your-email]Authenticate example.com's replacement domain and authorize the From address. In Contact Form 7, [your-email] must match an actual email field in that form.
Do
- Send from an authenticated, authorized address.
- Use the visitor's validated address in Reply-To.
- Keep a database copy of form entries.
- Test staff mail and visitor confirmations separately.
Don't
- Paste your personal Gmail password into a plugin.
- Send from another domain without authenticating it.
- Assume every form plugin stores submissions.
- Count a success banner as proof of inbox delivery.
Entry storage is a separate feature to confirm, not something SMTP adds automatically. Verify that a test submission is actually saved and readable by the right staff. If there is no stored copy, fixing delivery later cannot recreate inquiries that were never recorded.
↑ Back to topKeep form delivery on your care checklist
Mail can stop after an account password change, a disconnected authorization, a hosting move or a DNS edit. Keep a short record of the provider, sender, form destinations and person responsible. Make that record accessible to the business without putting secrets in an ordinary document.
What to check after changes and during routine care
- Submit each live form.Include alternate languages, quote requests and any order or booking notifications. Confirm receipt and stored entries rather than checking the page alone.
- Review delivery errors and account limits.Investigate rejected messages, expired authorization and unexpected sending volume. Route failure alerts to a monitored channel that does not rely solely on the broken mail route.
- Protect stored leads and credentials.Limit access to logs and entries, retain only what the business needs, and include stored submissions in database backups. Revoke unused credentials when providers or staff change.
- Retest after updates and migrations.Repeat the same labeled submission after changing forms, SMTP settings, hosting or DNS. Preserve a dated result so the next person knows what was verified.
Use our guides to WordPress backups, safe WordPress updates and WordPress security to protect the rest of this workflow. If you want one team to own the repair and follow-up checks, see WordPress management.
↑ Back to topWe can do this for you
Want us to fix your form emails?
We trace the failure and configure a sending route your business can maintain. You receive the scope and fixed written quote before work begins.
- An authenticated SMTP, OAuth or provider API connection.
- Sender-domain records and From / Reply-To settings.
- Sending logs and form-entry storage within the agreed scope.
- Real form, inbox and authentication checks with handoff notes.
Frequently asked questions
Why is WordPress not sending email even with a success message?
The form may have accepted the submission without proving inbox delivery. Check the recipient, sending log, provider response and spam or quarantine, then test the same form through an authenticated sending connection.
Which SMTP plugin should I use?
WP Mail SMTP, FluentSMTP and Post SMTP are options to compare. Choose one that supports your provider's current authentication method and the logs you need, confirm the required edition, and avoid overlapping mail-routing plugins.
Can I use Gmail for WordPress SMTP?
Yes, if your account permits the chosen connection. Use a supported Google sign-in connection, or an App Password with 2-Step Verification for eligible manual SMTP setups. Use an authorized sender and review sending limits.
Why is my WordPress contact form not sending email when the SMTP test works?
Check form-specific notification rules, recipient addresses and field tags. Also confirm the public submission passes validation and spam checks. The plugin test does not exercise those parts of the form.
How do I fix Contact Form 7 not sending email?
Check the Mail settings, authenticate the sending route and use an authorized From address. Put the visitor's email in Reply-To using the correct field tag, then verify a real submission, its stored copy and inbox receipt.
Does Microsoft 365 work with WordPress email?
Yes, through a supported connection. A plugin's Microsoft OAuth integration or an authenticated transactional service avoids depending on legacy password-based SMTP AUTH. Your Microsoft administrator may need to approve the connection.
Does installing SMTP recover missing form messages?
No. It changes future sending. Existing inquiries can only be recovered from records that were saved, such as stored form entries, a CRM or provider records containing the needed message data. Check those sources before deleting logs.
Can Fer Marketing fix our website email delivery?
Yes. WordPress management starts from $250 with a fixed written quote before work. We review the form and sending route, agree the scope and test delivery. Agencies can request white-label work.
Tell us which form is failing for a fixed written quote from $250 and a same-business-day reply; white-label work is available for agencies.