Why are contact form emails not arriving? What to check
A contact form message can get stuck on the website, in the sending service or at the recipient’s mailbox. Possible causes include an incorrect address, a spam filter, a connection failure or misconfigured email authentication. Here is how to check each stage and collect the information needed to fix the problem.
Where should you start checking the form?
Change one setting at a time and record the result of each test. This makes it easier to identify what fixed the problem. Follow the path from the form through the sending service to the recipient’s mailbox.
Website form → sending service (server, SMTP or API) → recipient’s mailbox
Identify which of these three stages is losing the message.
1. Send a test submission
Open the website in a private browser window and complete the form using your own details. Use an email address you can currently access. Record the exact date and time of the test. Check the public website as well as the editor, because the preview may behave differently from the version customers use.
Record the message shown after you press Send. A success message may mean the application accepted the submission or handed the email over for sending. Its meaning depends on the form. Check delivery in the mailbox and the email service logs. If you see an error or a continuous loading indicator, also check the server response, connection and spam protection.
2. Check the address and mailbox folders
Check the recipient address in the form settings character by character. A typo in the domain or an address left over from development can send enquiries to the wrong person. Run another test after each correction.
Check Spam, Trash, Promotions, Updates and Quarantine, where available. Review mail filters and forwarding rules too. A mailbox may accept a notification only for a rule to archive it immediately, or delivery may fail when the message is forwarded to another address.
3. Separate the form, sending service and mailbox
Check the three stages separately. First establish whether the website accepted the submission. Next check whether the sending service accepted the email and passed it on. Finally inspect the recipient’s mailbox. The form’s message describes only the stage its developer chose to report.
If the form stores the submission in its dashboard but the notification is not sent, check the sending mechanism. If the mail service confirms acceptance by the destination server but the message is absent from the inbox, check spam, quarantine and rules. An earlier rejection may also be caused by domain authentication, limits or sender reputation.
How should you describe the problem to your administrator?
A short message saying “the form is broken” makes diagnosis harder. Provide the form URL, the exact test date and time, the email address entered, the message displayed and whether the submission was saved in the dashboard. Ask for the web server and mail service logs for that time.
Common reasons messages go missing
Incorrect recipient address
A form may still contain a temporary address used during development, or an address with a typo. Check the current recipient setting in the form dashboard. Save any correction and send a test submission.
Incorrect sender address
Avoid putting the customer’s address in the From field. The form’s server will usually lack permission to send on behalf of the customer’s domain. This setup can cause rejection or spam placement, especially when that domain has a restrictive DMARC policy.
Set From to an address your sending provider permits, usually in your own verified domain, such as form@yourcompany.example. Put the customer’s address in Reply-To so that replying in your email app reaches the customer. Also check the provider’s requirements for an existing sender mailbox and domain authentication.
Validation and spam protection
Phone validation, a spam filter or a reCAPTCHA error can stop a submission. A honeypot field should normally remain empty. A bot or browser autofill filling it in may trigger a block. For reCAPTCHA, check the keys, allowed domain, version and server-side verification result.
Test spam protection on a staging copy, following the tool’s documentation. Check the specific error before changing keys. In your browser’s developer tools, inspect the Console and Network tabs. A JavaScript error or failed request may help locate the fault. Restore protection when testing is complete.
Form settings and logs
Field names must match the tags used in the notification template. If you rename a field to customer-address but the template still uses your-email, its value may be missing or shown as an unresolved tag. The result depends on the plugin. Check that required headers contain valid values too.
After moving the website to another server or changing its domain, check the form’s paths and connection details. For WordPress, keep the form plugin and WordPress itself up to date, taking a backup beforehand.
Ask for the form and mail service logs from the time of your test. Check which server returned the response and at which stage of the connection. The table below describes typical SMTP responses.
| Status | Meaning |
|---|---|
| 250 after message data | The server accepted responsibility for the message. Check whether this was the sending or destination server. An intermediate queue does not confirm placement in the Inbox. |
| 4xx / deferred | Temporary failure. A queueing server will usually retry according to its own policy. Check logs and waiting time. |
| 5xx / rejected / bounced | Permanent refusal for this attempt. Read the exact code and explanation, which may point to an incorrect address, a policy or another restriction. |
WordPress, hosting and plugin conflicts
A form can stop working after an update to PHP, the theme or an optimisation plugin. Tools that combine, delay or compress JavaScript files can interfere with the submit button.
Test plugin conflicts on a staging copy. Disabling plugins on the live website can disrupt customer contact. Save the settings and take a backup. Change one component at a time, send a test and check the logs. Once you identify the cause, restore the plugins you need and correct their configuration.
Your host may restrict PHP mail() or outgoing mail connections. Check the rules for your specific plan and inspect the logs. Depending on the environment, the solution may involve the host’s mail settings, authenticated SMTP or an email API.
SMTP, API, SPF, DKIM and DMARC
Authenticated sending
With authenticated SMTP, the website connects to a mail service using credentials and an encrypted connection. An API usually requires a token or key. Logging into the sending service alone does not establish correct domain authentication at the recipient. Also check SPF, DKIM signing and DMARC alignment against your provider’s instructions.
Use a sender address your provider permits and authenticates correctly. For a typical business form, this will be an address in your own domain. Avoid putting a customer’s address in From when the service lacks permission to send on their behalf.
What do SPF, DKIM and DMARC mean?
- SPF uses DNS to specify which servers may send for the domain in the envelope sender address, usually visible as Return-Path. This technical address may differ from From.
- DKIM signs selected headers and the message body. The recipient verifies the signature using a key published in the signing domain’s DNS.
- DMARC checks whether the domain in the visible From address aligns with a domain authenticated by SPF or DKIM. A pass from either mechanism with an aligned domain is sufficient. The policy may request monitoring (none), quarantine or rejection. The receiving server makes the final decision.
Have DNS changes handled by someone familiar with the company’s email setup. Errors in SPF, DKIM or DMARC can disrupt outgoing email delivery. Other records, such as MX, affect incoming mail. Save the current values and check your provider’s instructions before making changes.
How can you protect future enquiries?
- If your tool supports it, enable submission storage in its dashboard. Restrict access, set a retention period and arrange backups. Describe this processing in your privacy information.
- Consider a second business notification channel if it fits your data handling arrangements. A BCC copy depends on the same sending process, so it only covers some failures. Avoid distributing customer data to unrelated personal mailboxes.
- Send a test message through the website once a month and check how long delivery takes.
- Monitor available space in the business mailbox to avoid new messages being blocked by a full inbox.
- Set appropriate attachment size and format limits if the form accepts files.
If the submission was never stored in the dashboard or another durable location and the email was not retained, recovering its content may be impossible. Dashboard storage provides another way to read submissions during a mail outage. Check that it works and that only authorised people can access submissions.
For help preparing a form, see the contact form page and the guides to form fields and privacy. To have the configuration checked, describe the problem on the contact page.
Sources and verification date
Technical content checked on 11 November 2026.
- Contact Form 7 — sender and Reply-To
- WordPress — interpreting wp_mail() results
- RFC 5321 — SMTP server responses
- Google — email authentication and delivery
- Google Workspace — DMARC alignment
See also contact form · form fields · form privacy · contact page