Receber um formulário no e-mail6 min de leitura
Envie um formulário para vários endereços de e-mail
Mande um formulário por e-mail para a equipe toda, ou encaminhe cada mensagem à pessoa certa pelo assunto, sem deixar o próprio formulário escolher quem recebe.
Adicione cada pessoa como destinatária do formulário no painel: membros do workspace marcando-os, e qualquer outra pessoa por um link de confirmação, até 10 endereços. Cada um recebe a própria cópia de cada envio. Para mandar perguntas de vendas para uma pessoa e de suporte para outra, faça o roteamento por um campo num webhook.
O que muda aqui
Scripts PHP antigos e alguns serviços de formulário deixam o formulário indicar os próprios destinatários, com um campo oculto to ou cc. É prático, e também é assim que formulários de contato viram relays de spam: um bot muda o campo oculto e o seu servidor manda e-mail para quem ele quiser, a partir do seu domínio. O Ikiform não tem campo de destinatário. Quem recebe e-mail é definido no painel, e qualquer pessoa de fora do seu workspace precisa confirmar antes.
Isso deixa dois trabalhos diferentes, resolvidos em lugares diferentes:
| Você quer | Onde se faz | Limite |
|---|---|---|
| Todos recebem todos os envios | Destinatários nas configurações de Notifications do formulário | 10 endereços por formulário |
| Cada envio vai para a pessoa certa | Um webhook que lê um campo e manda e-mail para uma equipe | 3 endpoints de webhook por workspace |
Envie cada envio para a equipe toda
- O formulário envia uma vez ao Ikiform.
- O Ikiform monta a lista de destinatários: os membros marcados para este formulário, ou o padrão do workspace, mais os endereços de fora que confirmaram.
- Os duplicados são removidos e a lista para em 10.
- Cada destinatário recebe um e-mail separado, então ninguém vê os endereços dos outros.
- Endereços que ainda aguardam confirmação, e endereços pausados após uma devolução, são pulados.
- Abra o formulário no painel, depois Settings e Notifications. Confira se Email new submissions está ligado.
- Marque cada membro do workspace que deve receber e-mail. Só membros com endereço verificado aparecem na lista.
- Para quem é de fora do workspace, digite o endereço em Add someone outside the workspace e clique em Send link. Você pode adicionar 5 por formulário.
- Peça para a pessoa confirmar. Até ela confirmar, a linha dela diz Waiting for confirmation e ela não recebe nada.
Destinatários de fora veem os campos do envio e um link para cancelar a inscrição; eles não recebem um link para o painel, porque não têm conta. Membros recebem um botão View submission. Se alguém sair, remova a linha da pessoa; se ela cancelar a inscrição, a linha some também.
Membros e endereços de fora
Os dois tipos de destinatário se comportam de forma diferente, o que importa na hora de decidir quem adicionar onde:
| Item | Membro do workspace | Endereço de fora |
|---|---|---|
| Adicionado por | Marcá-lo no formulário | Send link, depois a confirmação da pessoa |
| Vê no e-mail | Os campos e um botão View submission | Os campos e um link para cancelar a inscrição |
| Pode abrir o painel | Sim | Não |
| Para de receber e-mail quando | Você o desmarca, ou ele sai do workspace | Você remove a linha, ou a pessoa cancela a inscrição |
| Conta para | O limite de 10 endereços | O limite de 10 endereços e os 5 endereços de fora por formulário |
Dê às pessoas que respondem as mensagens um assento no workspace, para que vejam envios anteriores e o spam. Use endereços de fora para quem só precisa ficar sabendo, como um gestor ou uma caixa compartilhada.
Encaminhe cada envio pelo assunto
Os destinatários não podem depender do que o visitante escolheu. Para isso, adicione um campo que nomeia a equipe e deixe um pequeno handler de webhook escolher o endereço. Este é o formulário:
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post">
<label for="department">Who should read this?</label>
<select id="department" name="department" required>
<option value="sales">Sales</option>
<option value="support">Support</option>
<option value="billing">Billing</option>
</select>
<label for="name">Name</label>
<input id="name" name="name" autocomplete="name" required />
<label for="email">Email</label>
<input id="email" name="email" type="email" autocomplete="email" required />
<label for="message">Message</label>
<textarea id="message" name="message" rows="5" required></textarea>
<input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden />
<button>Send</button>
</form>Defina department como um campo select no painel, para que um envio só possa trazer sales, support ou billing. Um bot que envia qualquer outra coisa recebe 422 validation_failed e nunca chega ao seu handler.
Depois, o handler. Ele verifica a assinatura, escolhe a equipe a partir de department e envia pelo seu próprio provedor de e-mail, aqui o Resend. Como é você quem envia o e-mail, você também escolhe o assunto:
import { Resend } from "resend";
import { verifyWebhook, WebhookVerificationError } from "@ikiform/sdk/webhooks";
const resend = new Resend(process.env.RESEND_API_KEY);
const TEAMS: Record<string, string[]> = {
sales: ["sales@example.com"],
support: ["support@example.com", "oncall@example.com"],
billing: ["accounts@example.com"],
};
export async function POST(request: Request) {
const payload = await request.text();
try {
const event = await verifyWebhook({
payload,
headers: request.headers,
secret: process.env.IKIFORM_WEBHOOK_SECRET!,
});
if (event.type !== "submission.created") return new Response(null, { status: 204 });
const fields = event.data.fields;
const department = String(fields.department ?? "support");
const { error } = await resend.emails.send(
{
from: "Website <forms@example.com>",
to: TEAMS[department] ?? TEAMS.support,
replyTo: typeof fields.email === "string" ? fields.email : undefined,
subject: `[${department}] ${String(fields.name ?? "New message")}`,
text: Object.entries(fields)
.map(([key, value]) => `${key}: ${String(value)}`)
.join("\n"),
},
{ idempotencyKey: event.id },
);
if (error) return new Response(error.message, { status: 502 });
return new Response(null, { status: 204 });
} catch (error) {
if (error instanceof WebhookVerificationError) return new Response(error.reason, { status: 400 });
throw error;
}
}- Os endereços ficam no seu código, não no formulário. Um visitante escolhe o nome de uma equipe, nunca um endereço.
replyTomantém o Reply apontando para o visitante, como o próprio e-mail do Ikiform faz.idempotencyKey: event.idfaz uma entrega repetida não enviar nada novo. O Ikiform tenta de novo uma entrega que não recebe2xx, com o mesmo id.- Um
502quando o provedor falha diz ao Ikiform para tentar mais tarde, então uma instabilidade curta não faz uma mensagem se perder. - Departamentos desconhecidos ou ausentes caem no suporte em vez de descartar a mensagem.
Adicione a URL em Webhooks no painel e copie o segredo whsec_ dela para IKIFORM_WEBHOOK_SECRET. A documentação de webhooks explica as novas tentativas e o payload. Prefere sem código? Um fluxo no Zapier ou no n8n com um filtro por departamento faz o mesmo.
Mantenha o e-mail do próprio Ikiform ligado para uma pessoa, como reserva, ou desligue Email new submissions para ninguém receber a mensagem duas vezes.
Confira se funciona
- Confira cada linha de destinatário nas configurações de Notifications do formulário. Nenhuma deve dizer Waiting for confirmation.
- Preencha o formulário na sua página e envie. Você cai na sua página de agradecimento, ou na hospedada pelo Ikiform.
- Cada destinatário recebe o próprio e-mail. Peça a um deles para conferir a linha To: ela mostra só o endereço dele.
- Se você faz o roteamento por webhook, envie uma vez por departamento e confira o log de entregas em Webhooks. Cada uma mostra
succeeded. - Envie com o honeypot preenchido,
_gotcha=bot. Ele ainda recebe uma resposta de sucesso, mas o envio é armazenado como spam e não dispara e-mail nem webhook.
Pegadinhas
- Sem CC nem BCC. Cada destinatário recebe uma mensagem separada, então não há conversa compartilhada. Combinem quem responde, ou façam o roteamento pelo assunto.
- O limite conta envios, não destinatários. Passando de 50 envios por hora num formulário, todos os destinatários recebem o resumo no lugar.
- Mudanças na equipe. Quando alguém sai do workspace, para de receber e-mail na hora. Confira os destinatários do formulário depois de uma mudança na equipe, para o formulário não ficar mandando e-mail para ninguém.
- Um endereço devolvido fica pausado. A linha mostra Emails bounced com uma data, e os e-mails para ele voltam depois disso. Corrija o endereço ou remova-o.
- Nada vai para o visitante. O Ikiform não envia e-mail para quem preenche o formulário. Os e-mails de notificação vão só para você e sua equipe, então não há resposta automática, e-mail de confirmação nem double opt-in. Envie esses e-mails pela sua ferramenta de e-mail, disparados por um webhook.
Perguntas
O Ikiform pausa os e-mails para esse endereço por um tempo e marca a linha como Emails bounced nas configurações do formulário. Os outros destinatários não são afetados. Corrija o endereço ou remova-o.
Até 10. Isso inclui os membros do workspace que você marca e até 5 endereços de fora, e cada um deles confirma por link antes.
Não, e é de propósito. Um campo de destinatário deixaria qualquer um usar o formulário para mandar e-mail para qualquer endereço. Faça o roteamento por um campo select num webhook, com os endereços guardados no seu próprio código.
Não. Cada destinatário recebe um e-mail separado, endereçado só a ele.
Sim, com um webhook. Adicione um select de departamento ao formulário e deixe um pequeno handler ou uma ferramenta de automação escolher o endereço e enviar o e-mail.
Travou em algum passo ou quer um guia para o seu caso? Envie um e-mail para hello@ikiform.com.