When Contact Form 7 says a message was sent but no email arrives, check the spam folder and the form’s Mail settings first. Use an address on your website’s domain in the From field, place the visitor’s address in Reply-To, and then submit another test. If the form displays an error, its color helps identify whether mail sending or spam protection stopped the submission.
Identify where the failure occurs
Submit the form from a private browser window using a real email address. Note the message and its border color:
- Red: The mail-sending attempt failed.
- Orange: A spam protection module rejected the submission.
- Green: WordPress accepted the send request, but this does not prove that the recipient’s mail server delivered the message.
Contact Form 7 documents these distinctions in its guide to the form response error message. Follow the matching section below instead of changing several settings at once.
Correct the Contact Form 7 mail settings
Before editing the form, copy the current contents of its Mail tab into a temporary text file. This gives you a quick rollback if a change makes matters worse.
Go to Contact > Contact Forms, edit the affected form, and open Mail.
Check the recipient
The To field must contain a valid mailbox that you can access:
[email protected]
For the first test, use one plain address rather than multiple recipients, forwarding aliases, or a mail-tag. Check for spaces, missing characters, and old addresses.
Use your domain in the From field
Do not use the visitor’s email mail-tag as the sender. If the website is example.com, use an existing address on that domain:
Website Contact <[email protected]>
Contact Form 7 specifically recommends a From address belonging to the site’s domain. Sending from a public mailbox or a visitor-supplied address can look like spoofing and may be rejected by your server or the recipient.
Put the visitor’s address in Additional headers instead:
Reply-To: [your-email]
Replace [your-email] with the actual email field name from the Form tab. The corresponding field should be a required email field, such as:
[email* your-email]
Contact Form 7’s mailbox syntax guidance explains why optional or non-email fields can produce invalid headers when they are empty.
Save the form and check whether Contact Form 7 still reports a configuration error.
Simplify the message temporarily
For testing, remove optional Cc, Bcc, attachment, and custom header lines. Use a short but complete plain-text message:
Name: [your-name]
Email: [your-email]
Message:
[your-message]
Submit the form again. If delivery starts working, restore the removed lines one at a time until you find the invalid header, empty mail-tag, or attachment causing the failure.
Fix a red sending error
A red response means the mail-sending attempt failed. Contact Form 7 recommends checking the mail configuration and asking the host to inspect mail-server errors when the cause is not visible in WordPress.
First, confirm that:
- The To and From fields contain valid addresses.
- The From address belongs to the website’s domain.
- Every mail-tag used in a header exists in the form.
- The message body is not empty.
- No attachment mail-tag refers to a removed upload field.
If those checks pass, ask your hosting provider whether outbound PHP mail is enabled and whether it rejected the test message. Give the host the submission time, sender, and recipient, but never send mailbox passwords or API credentials.
A practical long-term fix is to route WordPress email through an authenticated mail provider using an SMTP or API mailer plugin. Configure it with the provider’s own documentation, then send the mailer plugin’s test email before testing Contact Form 7.
A successful mailer test proves that WordPress can reach the provider. It does not prove that Contact Form 7 is using valid headers, so test the actual form afterward.
Fix an orange spam rejection
An orange response is not primarily an email transport problem. It means Contact Form 7 classified the submission as spam.
Possible sources include reCAPTCHA, Akismet, the WordPress disallowed comment keys list, and third-party Contact Form 7 spam extensions. Contact Form 7 recommends using its spam logging feature with Flamingo to identify which module rejected the message.
After enabling logging, submit one test and inspect the saved inbound message. Act on the recorded reason rather than disabling every protection layer.
If the log identifies a third-party honeypot or spam plugin, update that plugin and test again. If the failure began immediately after an update, temporarily deactivate only that add-on and repeat the same submission. Perform this test on staging when the form receives important enquiries.
Do not leave spam protection disabled. Restore the previous setting or reactivate the add-on after the test, then contact its developer if the conflict continues.
Fix successful submissions that never arrive
A green success message means the sending function accepted the request without reporting an error. WordPress notes that a successful wp_mail() return value does not guarantee delivery to the recipient.
Check these locations before changing the form again:
- Spam, junk, quarantine, and deleted folders
- Inbox rules and forwarding settings
- The recipient mailbox’s storage quota
- The mail provider’s delivery or activity log
- Server-side filtering in the hosting control panel
Send test submissions to two addresses on different providers. If one receives the message, the form is probably working and the failure is specific to the other recipient’s filtering or domain configuration.
If neither address receives it, use authenticated SMTP or an API mailer and verify the sending domain’s SPF and DKIM records using your email provider’s instructions. Do not add guessed DNS records: an incorrect SPF record or mismatched DKIM key can make delivery worse.
Check for a plugin or theme conflict
Run this test only after the mail settings and delivery service have been checked.
Create a staging copy or take a current backup. Then:
- Deactivate Contact Form 7 extensions, spam add-ons, optimization plugins, and security plugins one at a time.
- Submit the same form after each change.
- If the form starts working, reactivate the last plugin and test once more to confirm the conflict.
- Update or replace the conflicting extension rather than leaving security features disabled.
If disabling plugins does not help, temporarily switch to a default WordPress theme on staging. A theme conflict is less common, but custom JavaScript can interrupt the form request before Contact Form 7 processes it.
Restore the original theme and all unrelated plugins when testing is complete. Keep only the specific conflicting component disabled while you obtain a fix.