A successful form submission and successful email delivery are two different steps. Diagnosis should confirm whether WordPress accepted the form, whether a mail message was generated and whether the receiving server accepted it.
Symptoms
- Form shows success but no email arrives.
- Submission fails with AJAX/REST or JSON errors.
- Messages go to spam or are rejected.
- Only certain recipients/domains fail.
- The form stopped after DNS, SMTP, plugin or hosting changes.
Common causes
The same visible WordPress error can have several causes. A reliable fix starts by matching the symptom to logs, request behavior and recent changes.
- Hosting PHP mail is blocked or unreliable.
- SMTP credentials/API token invalid.
- SPF, DKIM or DMARC alignment problems.
- Form AJAX/REST request blocked by security or cache rules.
- Plugin conflict or JavaScript prevents submission.
Safe diagnosis
- Confirm whether the form submission reaches WordPress.
- Check mail logs or SMTP provider events for acceptance/rejection.
- Validate sender domain authentication and From/Reply-To configuration.
- Inspect browser Network/console errors for AJAX forms.
Production safety: create a recovery point before changing code, plugins, database values or server configuration. Business-critical WooCommerce sites should avoid random deactivate/update experiments during active traffic.
How the issue is fixed
- Configure authenticated SMTP or transactional email correctly.
- Correct SPF/DKIM/DMARC and sender identity where applicable.
- Repair blocked REST/AJAX requests.
- Fix form/plugin conflicts and verify delivery with controlled test messages.
Avoid this shortcut: Do not solve deliverability by spoofing a visitor’s email address in the From header. Use your domain as From and the visitor as Reply-To.
When to request expert WordPress bug fixing
Professional troubleshooting is useful when the site is business-critical, the error returns after a temporary fix, wp-admin is unavailable, the failure began after a complex update/migration, or you cannot identify the responsible code from logs. WP•FIX focuses on the smallest safe change that restores the failing path and explains the root cause.
Trace the message through three separate checks
| Checkpoint | Evidence to look for | Next action |
|---|---|---|
| Browser → WordPress | The form request and its response in the Network tab. | If blocked or failing, investigate the form endpoint before changing mail settings. |
| WordPress → mail provider | A matching SMTP or email API event. | No event suggests a generation or transport configuration problem. |
| Provider → recipient | Accepted, deferred, bounced or rejected status. | Follow the provider response; acceptance is not a guarantee of inbox placement. |
Check the request in your browser
Open Developer Tools → Network, submit a harmless test message and inspect the Fetch/XHR request. A 403 response can indicate a security rule; a 500 response needs a server-side error check. A 200 response still needs its response body checked for an application-level error. Do not post full request logs publicly: they may contain personal data or tokens.
Use a sender you control
In Contact Form 7, review the Mail tab. Use a sender on the site’s domain and the visitor’s address as Reply-To. Adapt the example to an address and domain authorized by your mail provider:
From: Website <[email protected]>
Reply-To: [your-email]
To: [email protected][your-email] is an example CF7 mail-tag: it must match the email field in your form. Elementor and other form plugins use their own dynamic-field syntax.
Interpret the mail provider’s response
An authentication failure points toward credentials or sender authorization. A connection timeout points toward transport, port or network restrictions. A policy rejection may involve the sender domain or recipient rules. Use the actual response code and provider documentation before changing DNS.
Verify the full result
Test a real submission to the intended recipient and, where practical, a second mailbox provider. Confirm receipt, Reply-To behavior and any stored form entry. Use test data, then remove it. Avoid sending repeated test messages to real prospects.
Reference: Contact Form 7: setting up mail.
FAQ
Why does the form say sent when no email arrives?
The website may have accepted the submission even though the mail transport or receiving server later rejected the message.
Do I need an SMTP plugin?
Authenticated SMTP or an email API is often more reliable than unauthenticated PHP mail, but the correct setup depends on the hosting and provider.
Can Cloudflare block a contact form?
It can block AJAX/API submissions through WAF or bot rules, but it does not directly deliver the email.
Can you fix Contact Form 7, Elementor Forms or Gravity Forms?
Yes. The troubleshooting model applies to the submission endpoint and mail transport regardless of the form plugin.
Need this WordPress issue fixed?
Send the URL, error message and what changed immediately before the problem started.
Request troubleshooting