Free plan

50 submissions/month · no credit card · View plans

Tutorials 6 min read

How to Build a Contact Form Without a Backend in 2025

Building a contact form used to mean writing server-side code and configuring email servers. In 2025 you can skip all of that and be live in under 5 minutes.

Quick-start guide

Have your first form live in under 5 minutes - no server required.

Building a contact form used to mean spinning up a server, writing PHP mail handlers, wrestling with SMTP configuration, and worrying about spam bots. In 2025 there is a much better way: use a form backend service to handle all of that for you.

In this guide you will build a fully functional contact form with email notifications, spam protection, and a thank-you redirect in under 5 minutes.

What you need

  • An HTML file (or any website - static, React, WordPress, whatever)
  • A free formvoxo account (takes 30 seconds to create)

Step 1: Create your form in the dashboard

Sign up at formvoxo.com, click Create form, give it a name like "Contact Form", and enter the email address where you want to receive submissions. You will get a unique endpoint URL like this:

your endpoint
https://formvoxo.com/f/abc123xyz

Step 2: Write the HTML

Point your form's action attribute at your endpoint. That is literally all you need to do:

contact.html
<!-- name, email, message - that is all -->
<form
  action="https://formvoxo.com/f/abc123xyz"
  method="POST">

  <input type="text"  name="name"    placeholder="Your name"  required>
  <input type="email" name="email"   placeholder="Your email" required>
  <textarea name="message" rows="4" required></textarea>
  <button type="submit">Send message</button>
</form>

No PHP. No Node.js. No SMTP configuration. That is your entire contact form.

Step 3: Add honeypot spam protection

formvoxo checks for a hidden _honey field automatically. Bots fill it in; real users never see it. Add this inside your form:

contact.html
<!-- honeypot - invisible to real users, bots fill it in -->
<input
  type="text"
  name="_honey"
  style="display:none"
  tabindex="-1"
  autocomplete="off">

Step 4: Custom redirect (optional)

By default users land on a hosted thank-you page. To send them somewhere of your own, add a hidden _redirect field:

contact.html
<input
  type="hidden"
  name="_redirect"
  value="https://yoursite.com/thank-you">

Step 5: AJAX mode for React, Vue, Next.js

If you are building a single-page app, send the form via fetch with Accept: application/json. formvoxo returns JSON instead of redirecting the page:

contact.js
const res = await fetch('https://formvoxo.com/f/abc123xyz', {
  method:  'POST',
  headers: {
    'Accept':       'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ name, email, message }),
});

const data = await res.json();

if (data.success) {
  // show inline success message
} else {
  // handle error
}

What you get for free

Email notifications

Get notified the moment a submission arrives.

Spam protection

Honeypot detection and per-IP rate limiting on every form.

Submissions dashboard

View, search, and export all your submissions.

Ready to try it?

Create your free formvoxo account and have your contact form live in the next 5 minutes.

formvoxo

Start collecting form submissions today

No server, no backend code. Just point your HTML form at your endpoint and you're live.