in

How to Create a WordPress Contact Form (Best Free Plugins)

Create a WordPress Contact Form
Create a WordPress Contact Form

I’ve set up contact forms on probably thirty different WordPress sites at this point, and the plugin choice matters less than people think — what actually breaks things is almost always email delivery, not the form builder itself. Creating a WordPress contact form with a free plugin takes maybe ten minutes, but getting the submissions to actually land in your inbox is where most people get stuck.

So let’s go through the plugins that are genuinely worth using, then fix the part that actually causes problems.

Quick Answer

  • Contact Form 7 — most lightweight, zero upsells, but you’ll need to add your own CSS for styling.
  • WPForms Lite — easiest drag-and-drop builder, but several useful features are locked behind the paid version.
  • Fluent Forms — generous free tier, fast, good entry management built in.
  • Forminator — surprisingly feature-rich free tier, including conditional logic.
  • Whichever plugin you pick, install WP Mail SMTP too — this fixes the single most common WordPress contact form problem: emails not arriving.

Comparing the Free Plugins

This is where most “top 10 plugins” lists get lazy and just list names without saying what’s actually different. Here’s the honest breakdown.

PluginFree Tier StrengthFree Tier Limitation
Contact Form 7No nags, fully functional core, huge community of tutorialsNo built-in styling — forms look bare until you add CSS
WPForms LiteCleanest drag-and-drop builder for beginnersNo conditional logic, no file uploads, limited templates in free tier
Fluent FormsConditional logic and entry management included freeSmaller plugin ecosystem/add-on marketplace than WPForms
ForminatorMulti-step forms and conditional logic in free versionInterface feels a bit more cluttered than the others

If you want something that just works with minimal fuss and you don’t mind writing a bit of CSS, Contact Form 7 is still hard to beat — it’s been around forever for a reason. If you want a polished builder experience with zero CSS knowledge required, WPForms Lite is the easier starting point, just know you’ll hit its ceiling fast if you need conditional fields.

Step-by-Step: Setting Up a Contact Form with Contact Form 7

I’m using Contact Form 7 here since it’s the most installed option and a reasonable default for most sites.

Step 1: Install the plugin

Go to Plugins → Add New, search “Contact Form 7,” install and activate.

Step 2: Create your form

Navigate to Contact → Add New. The default template includes name, email, subject, and message fields, which covers most basic use cases without any editing.

Step 3: Customize the fields if needed

Each field is a tag like [text* your-name] — the asterisk marks it required. Add or remove fields directly in this tag editor. It’s not the friendliest interface at first, but it’s genuinely simple once you’ve done it once or twice.

Step 4: Set up the “Mail” tab

This controls where submissions get sent and what the email looks like. Double-check the “To” field has your actual email address — it defaults to the WordPress admin email, which isn’t always what you want.

Step 5: Copy the shortcode onto your page

Copy the shortcode shown at the top of the form editor (something like [contact-form-7 id="123" title="Contact form 1"]) and paste it into any page or widget area.

Step 6: Test it — actually send a real submission

Don’t just save and assume it works. Submit a real test message from a different email account and confirm it lands in your inbox, not just your spam folder.

The Part Everyone Skips: Email Deliverability

Here’s the thing nobody tells you when you’re following a basic tutorial: by default, WordPress sends form emails through PHP’s built-in mail() function, and a lot of hosting providers either block this outright or send it in a way that gets flagged as spam by Gmail, Outlook, and others. This is, from what I’ve seen, the actual cause behind most “my contact form isn’t working” complaints — the form submits fine, the email just never shows up anywhere visible.

Install WP Mail SMTP (or a similar SMTP plugin) and connect it to a real mail sending service — Gmail’s API, SendLayer, Brevo, or your hosting provider’s SMTP credentials all work. This routes your form emails through an authenticated mail service instead of PHP’s unreliable default, and it fixes deliverability almost every time.

What Actually Worked For Me

Had a client site where the contact form looked completely fine — submitted without errors, no console warnings, nothing obviously broken. But messages just weren’t showing up. Spent a while checking the form’s Mail tab settings, re-checked the “To” address three times, even rebuilt the form from scratch assuming something in the original setup was corrupted. None of that did anything.

Eventually checked the hosting provider’s email logs (most shared hosts have this buried somewhere in cPanel), and the message was there — getting bounced before it even left the server, because the host’s PHP mail() function wasn’t properly authenticated for that domain. Installed WP Mail SMTP, connected it to the client’s actual Gmail account through OAuth, and submissions started arriving within minutes. Felt a little annoyed I hadn’t checked the server logs first instead of assuming the form plugin itself was broken.

Common Issues and Fixes

Form submits but no email arrives. Almost always a deliverability issue, not a form-builder bug — see the SMTP fix above before troubleshooting anything else.

Form works on desktop but not mobile. Usually a caching plugin issue — some caching setups serve a stale cached version of the page that doesn’t include the form’s AJAX submission script properly. Exclude the contact page from caching, or use the plugin’s cache-busting/nonce handling if it offers one.

Spam submissions flooding the inbox. Add a honeypot field (most modern form plugins include this option built in, even in free tiers) or reCAPTCHA. Honeypots are less intrusive for users and catch a surprising amount of basic bot spam on their own.

Form styling looks broken or unstyled. Common with Contact Form 7 specifically, since it ships with almost no default CSS. Your theme’s existing form styles usually apply automatically, but if not, you’ll need a few lines of custom CSS targeting the .wpcf7-form classes.

Prevention Tips

  • Set up SMTP from the start on any new site, even before you think you need it.
  • Test form submissions after any major theme or plugin update — updates occasionally break shortcode rendering or JS dependencies.
  • Don’t stack two form plugins on the same site “just in case” — conflicting JS can cause silent submission failures.
  • Keep a simple honeypot or CAPTCHA active from day one rather than waiting until spam becomes a problem.

FAQ

Do I need a paid plugin for a basic contact form? No. For a simple name/email/message form, any of the free tiers covered here handle it completely fine.

Why does my contact form email end up in spam? Usually because it’s being sent through an unauthenticated default mail method. An SMTP plugin connected to a real email service fixes this in most cases.

Can I use Contact Form 7 without writing any CSS? Technically yes — it’ll work, it just won’t look styled. Most themes apply at least minimal default styling, but don’t expect much without some manual CSS.

Is Fluent Forms actually free, or is that a trial? The core plugin is genuinely free and functional long-term — it’s not a trial, though some advanced add-ons are paid.

Which plugin is fastest/lightest on page load? Contact Form 7 and Fluent Forms are generally the lighter options. WPForms and Forminator load a bit more JS/CSS by default, though the difference is rarely noticeable on a normal hosting setup.

Editor’s Opinion

Pick whichever plugin’s interface you personally don’t hate looking at — they’re all functionally fine for basic forms, and the real difference shows up only once you need conditional logic or file uploads. The SMTP step is the one thing I’d tell anyone not to skip, since “my form doesn’t work” is almost never actually the form plugin’s fault.

Written by ugur

Ugur is an editor and writer at (NSF Tech), specializing in technology and Windows. He produces in-depth, well-researched, and reliable stories with a strong focus on Windows, emerging technologies, digital culture, cybersecurity, AI developments, and innovative solutions shaping the future. His work aims to inform, inspire, and engage readers worldwide with accurate reporting and a clear editorial voice.

Contact: [email protected]