WordPress contact form not sending email: causes and fixes
Quick answer: a WordPress contact form usually stops sending email because WordPress sends through the server PHP mail function and the receiving mail server rejects the message or files it as spam. Send through an SMTP service, use a From address on the site's own domain, publish SPF, DKIM and DMARC records, then send a real test and check the inbox.
Why does the form show success when the email fails?
Contact Form 7, WPForms, Gravity Forms, Elementor and Divi forms all pass the notification to WordPress, which calls wp_mail(). The form shows its success message when that call returns. What the receiving server does next is out of the form's sight. A rejected or spam-filed message gives no error on the site.
What are the most common causes?
- No SMTP. The host's PHP mail is blocked, rate-limited or not trusted.
- Wrong From address. The form sends "from" the visitor's Gmail or Yahoo address, or from a domain the server is not allowed to send for. Put the visitor's address in Reply-To instead.
- Missing domain authentication. No SPF record that includes the sending service, no DKIM signature, or no DMARC record. Google's sender guidelines require these for reliable delivery.
- A plugin, theme or host change. An update replaces mail settings, or a security plugin blocks the send.
- A wrong recipient. The notification still goes to a former employee's or an old domain's address.
- The receiving inbox. A filter, a full mailbox or a quarantine rule hides the message.
How do I fix it, step by step?
- Install an SMTP plugin (for example FluentSMTP, WP Mail SMTP or Post SMTP) and connect it to the domain's mail service or a transactional email service.
- Set the From address to an address on the site's own domain, such as forms@yourclient.com. Set Reply-To to the visitor's email field.
- Check the DNS records: an SPF TXT record that includes the sending service, a DKIM record from that service, and a DMARC record at _dmarc.yourclient.com.
- Check the notification recipient in each form. Remove old addresses.
- Turn on the SMTP plugin's email log and failure alert.
- Submit a real test lead through the live form and confirm it in the recipient's inbox, not only in the log.
How do I check the mail records of a domain?
On a Mac or Linux terminal: dig +short TXT yourclient.com shows SPF, dig +short TXT _dmarc.yourclient.com shows DMARC, and dig +short MX yourclient.com shows where the domain's mail goes. Online DNS lookup tools show the same records.
Why is a log not enough?
An SMTP log shows that the mail service accepted the message. It does not show that a person's inbox received it. Only a test that reaches an inbox, confirmed by someone who reads that inbox, proves arrival. That is why we check forms with a marked test lead. Get a free check of one client site.
Questions
Why does my WordPress form say "sent" but no email arrives?
The form plugin only knows that WordPress accepted the message. WordPress then hands it to the server mail function or an SMTP service. If the receiving server rejects it or files it as spam, the form still shows its success message.
Do I need an SMTP plugin for contact forms?
On most hosts, yes. Without SMTP, WordPress sends through the server PHP mail function, often from an address that the domain does not authorize. An SMTP plugin sends through an authenticated mail service, which receiving servers trust more.
Why do form emails go to Gmail spam?
Gmail checks that the sending domain authorizes the server (SPF), that the message is signed (DKIM), and that a DMARC policy exists. A form email that fails these checks, or uses the visitor address as the From address, often goes to spam.
How often should I test client contact forms?
Test after every plugin, theme or host change, and on a schedule. Agencies that sell form testing publish weekly, monthly or quarterly tests. A daily automatic check catches failures fastest.