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.
| Plugin | Free Tier Strength | Free Tier Limitation |
|---|---|---|
| Contact Form 7 | No nags, fully functional core, huge community of tutorials | No built-in styling — forms look bare until you add CSS |
| WPForms Lite | Cleanest drag-and-drop builder for beginners | No conditional logic, no file uploads, limited templates in free tier |
| Fluent Forms | Conditional logic and entry management included free | Smaller plugin ecosystem/add-on marketplace than WPForms |
| Forminator | Multi-step forms and conditional logic in free version | Interface 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.
