Email both ways. Invitations send a survey's public page and store nothing. Inbound email gives a feedback Form an address; what arrives is stored as a Submission, and status changes answer in the thread.
Noonmark does two unrelated things with email, both through Resend:
- Invitations send a survey's public page to a list of people. Nothing is stored.
- Inbound email is a Source: mail sent to a Form's own address is stored as a Submission.
The rest of this page is about invitations.
Set up
Two environment variables, both on the server:
| Variable | What it does |
|---|---|
RESEND_API_KEY | Turns sending on. Without it the panel renders disabled and says so. |
EMAIL_FROM | The sender. Defaults to Noonmark <invites@noonmark.dev>. The domain must be verified in Resend. |
RESEND_API_KEY=re_123…
EMAIL_FROM="Acme <surveys@acme.com>"Send
On a survey Form's Integrations tab. Only survey Forms with a public address have
the panel — feedback Forms have no hosted page to invite anyone to.
Paste addresses comma or newline separated. Up to 20 per send, duplicates are dropped, and a malformed address stops the send and is named. Each recipient gets their own email; nobody sees anyone else's address.
The email
| Part | Content |
|---|---|
| Subject | You're invited: <form name> — editable before sending. |
| Message | Your optional one-line note, shown above the button. |
| Button | Opens the public page at /f/<handle>. |
| Footer | "Sent via Noonmark". |
An invitation stores nothing. The per-recipient results — sent, or failed with the reason — show in the panel after the send and last until you leave the page. That is true of invitations only: inbound email stores what it receives, because what it receives is a Submission.
Sends go out one at a time with a short gap, and a rate-limited send is retried once. A failed address fails alone; the rest still go.
What did you think of this content?