Skip to content
WordPress

Making WordPress Contact Forms Deliver to the Inbox

A WordPress contact form is essential for every site, but the default options are none. Here are 3 reliable methods — CF7, WPForms, Fluent Forms — plus email delivery and spam fixes.

Making WordPress Contact Forms Deliver to the Inbox

Every WordPress site needs a way for visitors to get in touch — whether that is a simple name-and-email enquiry form, a multi-step booking request, or a support ticket submission. A WordPress contact form is one of the most fundamental features a site can have, and WordPress does not include one out of the box. This guide covers the three most practical ways to add one, from the simplest free plugin to building one that handles complex workflows, so any site can have a working contact form without unnecessary complexity. We go deeper on the whole subject in our Complete Guide to WordPress How.

WordPress Contact Form — Choosing the Right Plugin

The WordPress contact form plugin market has dozens of options ranging from simple free tools to enterprise-grade form builders. Choosing the right one from the start avoids the need to migrate form data later, which is complex and often lossy.

The three most widely used free WordPress contact form plugins are Contact Form 7 (the most installed WordPress plugin with over 5 million active installations), WPForms Lite (cleaner UI, drag-and-drop builder, limited to basic forms in the free version), and Gravity Forms Lite through Fluent Forms (full-featured free tier with conditional logic). Contact Form 7 is the right choice for simple enquiry forms on sites that do not need a drag-and-drop builder or form entry logging — it is lightweight, well-supported, and has a massive ecosystem of third-party add-ons. WPForms Lite is the right choice for non-technical site owners who want a visual builder and pre-built templates. Fluent Forms is the right choice for sites that need conditional logic, multi-page forms, or integrations with CRMs and email marketing tools — all available in the free version.

Before installing any WordPress contact form plugin, decide whether you need to store form submissions in the WordPress database. Contact Form 7 does not store entries by default — it only emails them. If the email delivery fails (a common issue — see below), the submission is lost permanently. Plugins like Fluent Forms, WPForms, and Gravity Forms store every submission in the database as a “form entry,” providing a backup if emails fail. For any business-critical contact form, choose a plugin that stores entries. The slight database overhead is vastly outweighed by the security of knowing no submission is ever lost to an email delivery failure.

Setting Up Contact Form 7 Step by Step

Contact Form 7 is the most widely deployed WordPress contact form plugin and deserves a thorough walkthrough because its configuration interface, while not visually polished, is extremely powerful once understood.

Install and activate Contact Form 7 from the WordPress plugin directory. Navigate to Contact → Add New. The form editor has two tabs: Form (where you build the form fields) and Mail (where you configure the email notification sent to you when a form is submitted). The Form tab shows default WordPress contact form fields using shortcode syntax — [text* your-name] creates a required text field, [email* your-email] creates a required email field, [textarea your-message] creates a text area, and [submit "Send"] creates the submit button. Add or remove fields by editing the shortcode tags. The asterisk (*) makes a field required — removing it makes the field optional.

Configure the Mail tab: set the To field to the email address where submissions should arrive (your business email), set From to use the site email with the submitter’s email in the Reply-To field — [your-email] as the Reply-To address allows replying directly to the person who submitted the form. Set Subject to something descriptive like “New contact from [your-name]”. In the Message Body, include all form fields using their tags so you receive the complete submission. Save the form → the plugin provides a shortcode like [contact-form-7 id="1" title="Contact form"] → paste this shortcode into any page, post, or widget area where the WordPress contact form should appear. According to Contact Form 7’s official documentation, the plugin does not store form submissions in the database — enabling the Flamingo add-on (free, by the same developer) adds database storage for all CF7 submissions.

Building a Contact Form With WPForms

WPForms Lite provides a drag-and-drop WordPress contact form builder that non-developers find significantly more approachable than Contact Form 7’s shortcode-based interface. The visual WordPress contact form builder shows fields in real time as fields are added, moved, and configured.

Install WPForms Lite → navigate to WPForms → Add New → select the “Simple Contact Form” template. The template creates a pre-built form with name, email, and message fields. The left panel shows available field types — drag any field from the left into the form on the right to add it. Click any field in the form to open its settings on the left: change the label, add placeholder text, mark as required, add conditional logic (Pro feature). The Email field type includes automatic email validation — invalid email formats show an error without requiring any configuration.

Configure notification emails: click Settings → Notifications → the default notification sends the form submission to the WordPress admin email. Add the submitter’s email as a Reply-To header by clicking Show Smart Tags → Email — this inserts the submitter’s email address so replies go directly to them. Add a second notification to send an auto-reply confirmation to the person who submitted the WordPress contact form: click Add New Notification → set the Send To Email Address to {field_id=”1″} (or the smart tag for your email field) → write a thank-you message. This auto-reply confirms to visitors that their message was received and sets expectations for a response time. Our guide on fixing WordPress not sending emails covers SMTP configuration that ensures form notification emails are delivered reliably rather than going to spam.

Contact Form Email Delivery — The Most Common Problem

The most frequent issue with any WordPress contact form is submissions not arriving by email. The form accepts data, shows a success message, but no email reaches the inbox. This is the PHP mail delivery problem described in our email guide — and it affects every contact form plugin equally because they all use WordPress’s wp_mail() function, which relies on PHP mail by default.

Install WP Mail SMTP and connect it to a proper mail service: WP Mail SMTP → Settings → run the setup wizard → select your SMTP service (Gmail, Brevo, Mailgun, or your hosting’s SMTP) → complete the authentication. After configuring SMTP, use the WP Mail SMTP email test feature (Settings → Email Test) to send a test email and confirm delivery. Then submit a test entry through your WordPress contact form and verify the notification arrives in the inbox. If the test email works but form notifications still do not arrive, check the form plugin’s notification settings — the From email address may be using a domain that does not match the SMTP authenticated domain, causing the SMTP server to reject the email.

Form submission spam is a secondary problem that affects all WordPress contact form setups. Without spam protection, most public contact forms receive dozens of spam submissions per day within weeks of going live. All three major contact form plugins support reCAPTCHA v3 (Google’s invisible spam detection) and Cloudflare Turnstile (GDPR-friendlier alternative). Enable spam protection immediately after creating the form: in Contact Form 7, integrate via the Integration tab; in WPForms, via Settings → Spam Protection; in Fluent Forms, via the form settings. Akismet (the WordPress anti-spam service) also integrates with all major form plugins and filters spam submissions before they reach the inbox without requiring visitors to complete any CAPTCHA challenge.

Advanced Contact Form Features and Integrations

A basic WordPress contact form handles simple enquiries, but many sites need more sophisticated behaviour — file uploads, conditional fields, multi-step forms, or automatic CRM entry creation on submission.

File upload fields allow visitors to attach documents, images, or files to their submission. In Contact Form 7, add a [file your-file filetypes:pdf|doc|docx] tag to the form and configure accepted file types and maximum upload size. In WPForms, add a File Upload field from the left panel — configure accepted file types, maximum file size, and whether multiple files are allowed. Ensure the wp-content/uploads directory has write permissions (755) and that the PHP upload_max_filesize and post_max_size ini values are larger than the maximum expected upload size.

Conditional logic shows or hides form fields based on other field values — for example, showing a “Project budget” field only when the “I have a project” checkbox is selected. Conditional logic is available in Fluent Forms free, WPForms Pro, and Gravity Forms. It dramatically improves the user experience of complex enquiry forms by reducing the number of fields visible at any given time to only those relevant to the visitor’s specific situation. CRM integrations — connecting a WordPress contact form to HubSpot, Salesforce, Mailchimp, or ActiveCampaign — are available through each plugin’s official add-ons or through Zapier webhooks. Zapier’s free tier supports basic form-to-CRM automation that eliminates manual data entry for contact form submissions. Reviews from the WordPress plugin directory consistently rank Contact Form 7, WPForms, and Fluent Forms as the top three WordPress contact form plugins by active installations, reliability, and community support across all WordPress versions.

Styling a WordPress contact form to match the site’s design requires either CSS targeting the form’s output or using a plugin that provides built-in style options. Contact Form 7 outputs minimal, unstyled HTML — apply custom CSS to the form wrapper classes (.wpcf7, .wpcf7-form, .wpcf7-text, etc.) in the site’s stylesheet. WPForms and Fluent Forms provide built-in style settings (form background, field border radius, button colour) accessible within the plugin’s form builder without requiring custom CSS. For complete design control over any form plugin’s output, use browser DevTools to inspect the form’s HTML structure → identify the CSS class names applied to each element → write targeted custom CSS rules. Adding custom form CSS to a child theme’s style.css or a Code Snippets CSS snippet ensures the styles survive plugin updates.

Testing a WordPress contact form before going live involves more than confirming the form submits. Test each of these scenarios: submit with all required fields empty (all required fields should show validation errors), submit with an invalid email format (the email field should reject it), submit with all fields filled correctly (the success message should appear and the email notification should arrive in the inbox within seconds), and submit a test file attachment if the form has a file upload field (the file should arrive as an email attachment or be accessible in the plugin’s form entries). Also test on mobile — form usability on small screens is a frequent oversight, and fields that look fine on desktop may be too small to tap or read comfortably on a 375px mobile screen.

GDPR compliance for a WordPress contact form requires adding a data collection consent checkbox before the form can be submitted on sites that serve EU visitors. Contact Form 7 supports a checkbox with a consent requirement — add [acceptance acceptance-123] to the form and make it required. WPForms and Fluent Forms include built-in GDPR field types designed specifically for compliance checkboxes. The checkbox label should clearly state what data is collected, how it is stored, and where visitors can find the full privacy policy. Storing form submissions in the database (using Flamingo for CF7, or any plugin with built-in entry storage) also requires disclosing this in the privacy policy, as the personal data (name, email) is retained until manually deleted. Our guide on securing the WordPress admin covers user data management that relates to form submission data retention and deletion policies.

Embedding a WordPress contact form in the sidebar, footer, or within specific template files (rather than on a dedicated contact page) is straightforward with shortcodes or blocks. Contact Form 7 provides a shortcode — paste it into a Text widget in the sidebar or footer widget area, or directly into any post/page using the Shortcode block in the block editor. WPForms and Fluent Forms provide dedicated blocks in the Gutenberg block editor — search “WPForms” or “Fluent Forms” in the block inserter → select the block → choose the form from the dropdown. For template file embedding without shortcodes, both WPForms and Fluent Forms provide PHP functions: <?php echo do_shortcode('[wpforms id="1"]'); ?> outputs the form at any point in a PHP template file — place it in a child theme’s header.php, sidebar.php, or any custom template to embed the form at the desired location in the page layout.

Monitoring WordPress contact form submission rates over time reveals whether the form is working as expected and identifies drop-off patterns. Connect the form to Google Analytics 4 using GA4 event tracking — most form plugins support this through an official integration or a Zapier webhook. Track the form_submit event in GA4 and set it as a conversion. If the submission rate drops suddenly (visible as a sharp decline in the GA4 conversion report), it typically indicates a form plugin update broke something, spam protection became too aggressive and is blocking legitimate submissions, or an email delivery failure occurred and visitors are seeing error messages. Regular monitoring converts the contact form from a set-and-forget feature into a measured business asset with alerting capability. See also WordPress Favicon for a related case.

Nikolas Lamprou

Nikolas Lamprou (MSc; GCFR, SC-200, Security+) has been working with computers professionally since 2009 — starting with web development and e-commerce, and moving into cybersecurity over the years. Based in Greece, he brings over 15 years of real-world IT experience to SolveTechToday, where he writes about Windows fixes, software reviews, security tools, and AI applications. His goal is straightforward: cut through the noise and give readers clear, honest guidance on the tech decisions that matter.

Stay Ahead

Fix your next problem before it starts

Get the week's best Windows fixes, software picks, and security guides delivered straight to your inbox. No noise, just solutions.

Press ESC to close · Try "Windows 11" or "Chrome"