WordPress, WordPress tutorial, WordPress themes, WordPress plugins, WordPress hosting, WordPress security, WordPress SEO, WordPress shortcode, WordPress vs Squarespace, WordPress for beginners, WordPress blog, WordPress website builder, install WordPress, custom WordPress theme, WordPress development, WordPress dashboard, WordPress Gutenberg, WordPress Elementor, WordPress WooCommerce, WordPress website, best WordPress plugins, best WordPress themes, WordPress speed optimization, WordPress maintenance, WordPress updates, WordPress backup, WordPress migrations, WordPress page builder, WordPress REST API, WordPress hooks, WordPress filters, WordPress template, WordPress widgets, WordPress customizer, WordPress post, WordPress page, WordPress media library, WordPress user roles, WordPress multisite, WordPress community, WordPress forum, WordPress documentation, WordPress news, WordPress tutorials for beginners, WordPress e-commerce, WordPress membership site, WordPress portfolio, WordPress business website, WordPress agency, WordPress developer, WordPress designer, free WordPress themes, premium WordPress themes, free WordPress plugins, premium WordPress plugins, WordPress for small business, WordPress for enterprise, WordPress pros and cons, WordPress alternatives, WordPress hosting providers, managed WordPress hosting, shared WordPress hosting, WordPress performance, WordPress caching, WordPress CDN, WordPress firewall, WordPress SSL, WordPress multisite setup, WordPress login, WordPress password reset, WordPress admin, WordPress dashboard customization, WordPress database, WordPress code snippets, WordPress functions.php, WordPress child theme, WordPress block editor, WordPress classic editor, WordPress editor plugins, WordPress mobile app, WordPress CLI, WordPress headless, WordPress Jamstack, WordPress with React, WordPress with Vue, WordPress with Gatsby, WordPress and accessibility, WordPress privacy policy, WordPress GDPR, WordPress contact form, WordPress gallery, WordPress portfolio plugin, WordPress review plugin, WordPress social media plugin, WordPress SEO plugin, WordPress security plugin, WordPress caching plugin, WordPress page builder plugin, WordPress custom post types, WordPress taxonomy, WordPress advanced custom fields



If your website’s contact form submissions vanish into the void instead of arriving in an inbox, this guide walks you through every practical step to restore reliable email delivery. The instructions cover server-side causes, plugin settings, DNS records, SMTP configuration, testing techniques, and actionable fixes for popular form plugins including Contact Form 7, WPForms, and others.

You’ll get a structured troubleshooting flow you can follow start-to-finish, plus code snippets and configuration examples you can copy straight into your site. Wherever relevant, the guide explains why each step matters so you can prevent the problem from recurring.

Before you begin, make a backup of your WordPress site and keep access details for your hosting control panel and any email provider you plan to use. That ensures you can change settings and test safely without losing data.

How Email from WordPress Normally Works

WordPress delegates outgoing email to the server environment: by default it uses PHP’s mail() function which relies on the host’s mail transfer agent to hand messages to the wider internet. If the host disables mail() or restricts outbound ports, messages may never leave the server. Many hosts limit or block PHP mail() on shared accounts to prevent spam, which is why authenticated SMTP is now widely recommended.

Third-party form plugins generally generate an email and hand it to WordPress to deliver. If the plugin’s “From” address or envelope sender doesn’t match the domain or is obviously spoofed, recipient mail systems can drop or mark the message as spam. Proper authentication (SPF/DKIM/DMARC) and consistent sender addresses are key to passing spam filters.

Using an authenticated SMTP provider or a transactional email service replaces the unreliable PHP mail pathway with a secure, logged channel. This typically fixes deliverability issues because authentication helps recipient servers verify the message origin and reduces spam scoring.

Initial Checklist — Quick tests to run first

Before deep troubleshooting, run these quick checks in this exact order. They take only a few minutes and often reveal the root cause quickly.

  • Send a test email from WordPress: Use a plugin (WP Mail SMTP or similar) to send a test message. If it fails, note any error messages. This differentiates WordPress-level failures from plugin-level or form misconfiguration.
  • Check spam/junk folders: Messages sometimes arrive but are classified as spam. Confirm both sender and recipient folders.
  • Verify the form settings: Ensure recipient address is correct and “From” address uses a domain email (e.g., no-reply@yourdomain.com) rather than a generic free email or mismatched domain.
  • Deactivate caching/optimization plugins temporarily: Some caching or firewall plugins interfere with form processing. Testing in a minimal plugin environment helps isolate conflicts.
  • Check host email logs: Look at your hosting control panel or contact support for mail logs showing attempted deliveries or rejections.

These quick checks will tell you whether the issue is simple (typo, spam folder) or structural (server or authentication). If the test email fails with an SMTP error, capture the exact text — it will direct the next steps.

Step-by-step Troubleshooting Flow

1. Confirm plugin configuration

Open your form builder’s notification settings. Confirm the recipient (To) address, the sender (From) address, and subject. Many forms let you use shortcodes for sender fields — ensure those expand to valid addresses. If a plugin shows errors when saving the mail settings, correct those now.

If the plugin uses a “From” address that is different from your site domain (for example wordpress@gmail.com on a site hosted at example.com), switch the “From” to a domain-owned email (e.g., contact@example.com). This reduces rejection and spoofing flags.

2. Test PHP mail() vs SMTP

Install a mail-testing plugin (WP Mail SMTP or Post SMTP) and send a direct test. If PHP mail() fails but SMTP succeeds after configuration, the host likely blocks mail() or outbound ports. If both fail, the issue may be firewall or credential-related at the host or mail provider level.

When SMTP works, configure your site to always use SMTP rather than PHP mail(). That provides reliable delivery and logs for debugging. Popular mailers include SMTP relay via Google Workspace, Microsoft 365, SendGrid, Mailgun, Amazon SES, or your host’s mail server.

Example SMTP settings block you can adapt (replace placeholders):

Host: smtp.yourprovider.com
Port: 587
Encryption: TLS
Username: your-email@yourdomain.com
Password: your-email-password

After saving, use the plugin’s test tool to send a confirmation message and review any returned errors.

3. Check DNS: SPF, DKIM and DMARC

SPF tells mail receivers which servers are permitted to send email for your domain. DKIM signs messages so they can be verified against a public key in DNS. DMARC instructs receivers how to handle messages that fail SPF or DKIM. Missing or misconfigured DNS records are a common source of rejection or spam placement.

To verify, log into your DNS provider and look for SPF (a TXT record starting with v=spf1) and DKIM (usually created by your mail provider). If they are missing, the transactional mail provider or your email host will give the exact records to add.

4. Hosting restrictions and outbound ports

Some shared hosts block outbound SMTP ports (25, 465, 587) to prevent spam. Check your host’s documentation or contact support to confirm which ports are available and whether the PHP mail() function is disabled. If ports are blocked, you’ll need to use an API-based mailer (SendGrid/Mailgun/SES) or a provider that supports alternative ports like 2525.

If you find outbound ports are blocked, use the mailer plugin’s API option (e.g., SendGrid API) instead of SMTP—API-based sending bypasses host SMTP port restrictions.

5. Review email headers and logs

If emails are being sent but not received, request full mail logs from your host or use the mailer’s delivery logs. Inspect headers for authentication results (SPF, DKIM) and for bounce codes. A common bounce is “550 5.7.1” which typically indicates blocked or unauthenticated senders.

Mail logs will often include the precise error such as “relay denied”, “authentication failed”, or “greylisted”. Use these messages to decide whether credentials, DNS, or routing are at fault.

Plugin-specific notes and fixes

Contact Form 7

Contact Form 7 requires correct mail tab settings. Ensure the “From” field uses a domain email and the “To” field is the recipient. If Contact Form 7 shows the message that the web domain does not own the sender’s email, change the sender to an address on the domain or set up proper authentication.

Use an SMTP plugin to force Contact Form 7 to send through authenticated SMTP rather than PHP mail(). Many hosts and mailers provide integration instructions specifically for Contact Form 7.

WPForms, Gravity Forms and other builders

These premium plugins include notification debugging or logging in their settings. Enable email logging to capture failures, and pair the form with an SMTP plugin or transactional email service. Double-check form-specific settings like conditional notifications, which can prevent emails from firing if conditions are unmet.

Troubleshooting Checklist (5–8 steps with explanations)

  • Confirm recipient email correctness: A simple typo in the “To” field can cause no delivery notifications and is often overlooked. Always test by sending to a separate mailbox you control.
  • Use a domain-owned “From” address: Matching the domain improves deliverability and passes more checks. If necessary, create a mailbox such as noreply@yourdomain.com for this purpose.
  • Switch to authenticated SMTP/API: Authenticated sending reduces spam flags and provides logs. Choose an API option if your host blocks SMTP ports.
  • Add SPF and DKIM records: Proper DNS records let recipients trust messages and prevent them from being rejected or quarantined.
  • Review form and plugin logs: Logs show whether WordPress generated the mail and whether the outbound provider accepted it. This determines which side to fix — site or mail provider.
  • Check for plugin conflicts: Security, caching, or anti-spam plugins can interrupt form submissions. Temporarily deactivate them and test again.
  • Contact hosting support: Hosting providers can confirm server restrictions, blocked ports, or account-level mail policies that you can’t change yourself.
  • Monitor with an email testing tool: Use tools that show deliverability, spam score, and header analysis. Re-run tests after each change to confirm improvement.

Example: Configure WP Mail SMTP with Gmail / Google Workspace

Many site owners use Google Workspace or Gmail as the mailer. WP Mail SMTP provides an OAuth-based setup which avoids storing a plain password. The steps at a high level are:

  1. Create or choose a Google account tied to your domain email.
  2. In WP Mail SMTP, select the Gmail or Google Workspace mailer and follow the plugin prompts to create API credentials in Google Cloud Console.
  3. Authorize the app and save settings; send a test email and review the log.

If your site uses a basic Gmail account rather than Google Workspace, consider using an app password or a transactional service instead—some Gmail accounts have sending limits and stricter quotas that affect deliverability.

Pro Tips

These advanced tips help eliminate hard-to-find issues and harden deliverability for high-volume sites.

  • Use dedicated transactional email services for critical messages: Providers like Amazon SES, SendGrid, Mailgun, and Postmark specialize in deliverability and provide dashboards, bounce handling, and reputation monitoring.
  • Set up a dedicated subdomain for transactional mail: Sending from mail.yourdomain.com isolates reputation and allows separate SPF/DKIM policies.
  • Monitor bounce and complaint webhooks: Configure webhook handling with your mail provider to process bounces and remove bad addresses automatically.
  • Enable email logging on the site: Logging preserves a local copy of outgoing messages so you can inspect content and headers when issues arise.
  • Rotate credentials and tighten permissions: Use separate accounts or API keys for sending and avoid sharing high-permission admin credentials for mailers.

Frequently Asked Questions

Why do emails sometimes get sent but go to spam?

Spam filters evaluate sender reputation, message content, and authentication records. If SPF/DKIM are missing, or the message contains spammy phrases and links, it will often be routed to spam. Improving authentication, sanitizing message body content, and using reputable sending IPs reduces spam placement.

My host says mail() is enabled — why are messages still not delivered?

Even with mail() enabled, outbound connections can be throttled, or your server IP may be blacklisted. Mail logs and headers will typically show the rejection reason. Switching to authenticated SMTP or an API-based transactional provider often resolves this.

Is it safe to use a third-party SMTP like Gmail or Outlook?

Yes, using authenticated SMTP from trusted providers is safe and recommended. Be aware of rate limits and quota constraints on free consumer accounts; for business sites, use Google Workspace, Microsoft 365, or a dedicated transactional service designed for bulk or programmatic sending.

How do I test whether DNS records (SPF/DKIM) are configured correctly?

Use online DNS lookup tools or your transactional mail provider’s validation page. Insert the TXT or DKIM records provided by the mail provider into your DNS zone and wait for propagation, then use the provider’s verification tool to confirm success.

Putting it all together — a sample recovery sequence

Follow this ordered sequence when email from forms stops working to systematically eliminate causes:

  1. Send a test email using an SMTP testing plugin and capture errors.
  2. Confirm form notification settings, recipient address, and the “From” address.
  3. Switch to an authenticated mail method (SMTP or API) and test again.
  4. Add or verify SPF and DKIM records in DNS for the sending domain and validate them.
  5. If problems persist, gather mail logs or bounce messages and contact hosting support with the exact error codes for assistance.

This sequence minimizes wasted effort by starting with easy, reversible changes and progressing to structural fixes.

Conclusion

Contact form emails failing to reach their destination are a common but solvable problem. The reliable long-term solution is to use authenticated sending methods (SMTP or API) and ensure DNS authentication records (SPF, DKIM, DMARC) are present and correct. Start with simple checks — confirm recipients, use a domain-based “From” address, and test with an SMTP plugin — then escalate to DNS, hosting, and mail provider troubleshooting as needed. Use logging and delivery dashboards to confirm fixes and monitor ongoing deliverability. Following the structured steps in this guide will restore reliable contact form notifications and reduce future delivery issues.