# Reply to form submissions straight from your inbox

> Make Reply on a form notification write to the person who filled in the form: which field names work, when to use _replyto, and why replies go astray.

Published 2026-10-25 · https://ikiform.com/guides/send-form-to-email/reply-to

Name the form's email field `email` and Ikiform puts that address in the notification's reply-to header, so **Reply** writes to the visitor from your own mailbox. If the field has another name, or the form asks for two addresses, add a `_replyto` field with the right one. Without either, replies go to `notifications@ikiform.com`, which nobody reads.

## What's different here

A notification email has two addresses that matter. **From** is who sent it, and for deliverability that has to be Ikiform. **Reply-To** is where answers go, and that should be the visitor. Mail apps use Reply-To when it's present, and fall back to From when it isn't. So the whole job is making sure Ikiform can find the visitor's address in the post.

Ikiform sets the reply-to address from a `_replyto` field first, then from a field named `email`, `email_address`, `your_email`, `reply_to`, `contact_email`. The value must be one valid email address, or it is ignored.

Diagram: How Ikiform picks the reply-to address

1. If the post has a _replyto field holding one valid email address, that's the reply-to. It wins over every other field.
2. If not, Ikiform looks at the fields in the order they were posted and takes the first one with a recognised name and a valid address.
3. If neither exists, the email has no Reply-To header, and pressing Reply writes to notifications@ikiform.com.

A value with a comma, a line break or angle brackets is ignored, so nobody can add a second address or a header.

## Field names that work

Matching ignores case, so `Email` and `EMAIL` work as well as `email`. Here's how common names fare:

| Field name | Used for reply-to? | Why |
| --- | --- | --- |
| `email`, `Email`, `e-mail` | Yes | The plain name, in any case, with or without the hyphen |
| `email_address`, `email-address`, `emailAddress` | Yes | The long form, with `_`, `-` or nothing between the words |
| `your_email`, `contact_email`, `reply_to` | Yes | Common names from form templates |
| `user_email`, `work_email` | No | The prefix isn't one Ikiform knows. Rename it or add `_replyto` |
| `Email Address` | No | A space isn't a separator. Builders that use labels as names often produce this |
| `Email 2` | No | Builders number a second email field this way |

## Three ways to set it

The form below is a demo request, where the address is a work email and may sit next to a second address. Pick the version that fits how much you can change:

**Rename the field** (`demo.html`)

```html
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post">
  <label for="work-email">Work email</label>
  <input id="work-email" name="email" type="email" autocomplete="work email" required />

  <label for="company">Company</label>
  <input id="company" name="company" autocomplete="organization" />

  <label for="message">What are you trying to solve?</label>
  <textarea id="message" name="message" rows="5" required></textarea>

  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden />
  <button>Request a call</button>
</form>
```

**Copy into _replyto** (`demo.html`)

```html
<form id="demo" action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post">
  <label for="work-email">Work email</label>
  <input id="work-email" name="work_email" type="email" required />

  <label for="referrer-email">Who referred you? (their email)</label>
  <input id="referrer-email" name="referrer_email" type="email" />

  <input type="hidden" name="_replyto" />
  <button>Request a call</button>
</form>

<script>
  const demo = document.getElementById("demo");
  demo.addEventListener("submit", () => {
    demo.elements.namedItem("_replyto").value = demo.elements.namedItem("work_email").value.trim();
  });
</script>
```

**From your server** (`send.ts`)

```ts
const origin = request.headers.get("origin");
const response = await fetch("https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx", {
  method: "POST",
  headers: {
    Accept: "application/json",
    "Content-Type": "application/json",
    Authorization: `Bearer ${process.env.IKIFORM_SECRET_KEY}`,
    ...(origin ? { Origin: origin } : {}),
  },
  body: JSON.stringify({
    work_email: values.workEmail,
    referrer_email: values.referrerEmail,
    company: values.company,
    message: values.message,
    _replyto: values.workEmail,
    _gotcha: values.honeypot,
  }),
});
```

- **Rename** when you control the HTML. The label can still say "Work email"; only the `name` matters, and `autocomplete="work email"` keeps the browser's autofill right.
- **Copy into `_replyto`** when another system expects `work_email`, or the form has two addresses and the wrong one would match. The script fills the hidden field as the form submits, before the browser posts it.
- **From your server**, add `_replyto` to the JSON body. It doesn't need to be a form field at all. The incoming request's `Origin` is passed on because a server's own `fetch` sends none, and Ikiform counts free `localhost` tests by it.

Fields that start with `_` aren't stored as answers, so `_replyto` doesn't show up twice in the email. It's kept on the submission as `meta.reply_to`, which webhooks and the [REST API](https://ikiform.com/docs/api.md) include.

> If the copying script doesn't run, `_replyto` is posted empty and Ikiform ignores it. `work_email` isn't a recognised name, so that submission has no reply-to. Rename the field when you can; it has no failure mode.

## Who you're replying to

The reply-to is whatever the visitor typed. Ikiform checks that it's one well-formed address, not that it belongs to the person. A bot, or a prankster, can enter someone else's address, and your reply then goes to a stranger.

- Keep the first reply general. Don't send account details, invoices or anything private until the person has written back from that address.
- An address on a disposable domain adds 2 to the spam score. With another signal, such as an identical repeat, that's enough to keep the post out of your inbox.
- If the address bounces, it was a typo or a fake. The submission is still in the dashboard if you need the rest of it.

## What the visitor sees in your reply

Most mail apps quote the message you're replying to. Here that's Ikiform's notification, so the visitor sees their own answers laid out as a list, plus the notification's footer. That's usually fine, and it reminds them what they asked. Two things are worth a glance before you press **Send**:

- The footer has links meant for you: **View submission** for members, an unsubscribe link for outside recipients, and an abuse-report address. The dashboard link only works for people signed in to your workspace, but delete the quote if you'd rather not send it.
- If several people get the notification, each reply starts a separate thread with the visitor. Agree who answers, or the visitor gets two different replies.

Want a reply that never shows the notification? Start a new email to the address instead of pressing **Reply**. You lose the quoted question, so copy the line you're answering.

## Check it works

1. Fill in the form on your page and submit it. You land on your thank-you page, or Ikiform's hosted one.
2. Open the notification and look at the headers or the reply line. **Reply-To** shows the address you typed.
3. Press **Reply**. The **To** line holds the visitor's address and the **From** line is yours.
4. Post again with a malformed address in `_replyto`, such as `a@b.c, x@y.z`. The email arrives with the next valid field as the reply-to, or none.

## Gotchas

- **Digests have no reply-to.** Past 50 emails an hour, a form sends one digest for the rest, and it covers many visitors. Reply to those from the dashboard.
- **Reply All.** The notification goes to each recipient separately, so Reply All only adds your own address. It doesn't copy in your team.
- **Outlook's reply rules.** Some company mail setups rewrite or ignore Reply-To on external mail. If **Reply** still shows Ikiform's address, check with whoever runs your mail server.
- **Spam sends nothing.** A submission stored as spam has no email to reply to. Mark it as not spam and its email goes out then.
- **Two addresses in one field.** A value such as `ada@example.com, bob@example.com` is ignored as a reply-to, because a comma could smuggle in extra recipients. Ask for one address per field.
- **Builders that won't name a hidden input.** Some site builders don't let you call a field `_replyto`. Rename the visible email field to `email` instead; it does the same job.

## Questions

### Does reply-to work when I post JSON from my server?

Yes. Ikiform reads _replyto and the email-named fields the same way in JSON, urlencoded and multipart posts. Add _replyto to the JSON body when the address field has another name.

### Why does Reply go to notifications@ikiform.com?

The post had no _replyto field and no field with a recognised email name. Name the email field email, email_address, your_email, reply_to, contact_email, or add _replyto.

### What is the _replyto field?

A reserved field that sets the reply-to address of notification emails. It must hold one valid email address, it isn't stored as an answer, and it's passed to webhooks and the API as meta.reply_to.

### My form has two email fields. Which one is used?

_replyto if you send it. Otherwise the first field, in posted order, whose name is recognised and whose value is a valid address. Send _replyto to make the choice explicit.

### Can I change the From address to my own domain?

No. Notifications are sent from notifications@ikiform.com, which is what lets them pass spam checks without DNS setup on your side. Your reply comes from your own address, because you send it from your mailbox.

## More guides

- [Send a form to your email](https://ikiform.com/guides/send-form-to-email.md): Get every form submission in your inbox without a mail server: why mailto: and PHP mail() fail, and a setup that filters spam and lets you reply.
- [To Gmail](https://ikiform.com/guides/send-form-to-email/gmail.md): Get form submissions in Gmail without mailto: links, app passwords or Apps Script, then label them, keep them out of spam and reply from Gmail.
- [Multiple recipients](https://ikiform.com/guides/send-form-to-email/multiple-recipients.md): Email one form to your whole team, or route each message to the right person by topic, without letting the form itself pick who gets the mail.
- [Without PHP](https://ikiform.com/guides/send-form-to-email/without-php.md): Replace a contact.php script that calls mail() with a form that posts to a hosted endpoint, keeping your field names, your thank-you page and replies.
- [EmailJS alternative](https://ikiform.com/guides/send-form-to-email/emailjs-alternative.md): Move a contact form off EmailJS: why browser-side email keys are a risk, what changes in your code, and what you give up, such as the auto-reply.
- [Next.js](https://ikiform.com/guides/send-form-to-email/nextjs.md): Two ways to email a Next.js form with a Server Action: send it yourself with Resend or Nodemailer, or forward it to a form backend, compared honestly.
