Receber um formulário no e-mail

Receber um formulário no e-mail7 min de leitura

Envie um formulário do site para o Gmail (e por que o mailto: falha)

Receba os envios de formulário no Gmail sem links mailto:, senhas de app ou Apps Script, e depois rotule, tire do spam e responda pelo Gmail.

Preet SutharFundador, Ikiform

Envie o formulário para um backend de formulários e adicione seu endereço do Gmail como destinatário; não use um action mailto:, que só abre o app de e-mail do visitante. Depois crie um filtro no Gmail para o remetente, para que os envios escapem do spam e ganhem um marcador próprio. Clicar em Reply no Gmail responde ao visitante, a partir do seu próprio endereço.

O que muda aqui

O Gmail é uma caixa de correio, não um serviço de envio para o seu site. Ele não tem uma URL para a qual um formulário possa enviar, então todo caminho até o Gmail passa por outra coisa. A primeira coisa que a maioria das pessoas tenta é mailto::

O formulário que parece funcionar
<form action="mailto:you@gmail.com" method="post" enctype="text/plain">
  <input name="name" />
  <input name="email" type="email" />
  <textarea name="message"></textarea>
  <button>Send</button>
</form>

Ele funciona, sim, na sua máquina. Você clica em Send, seu app de e-mail abre com os campos no corpo e você envia para si mesmo. A experiência de um visitante é diferente:

O que um formulário mailto: faz no dispositivo de um visitantevisitanteclica emEnviara página nãoenvia nadaapp dee-mailconfigurado?um app dedesktop ouum handlerum rascunhoabreno app e naconta deleele clicaem Enviarde novoou fecha orascunhonadavisívelou um pedidopara escolherum appmailto:simtalveznãoO que um formulário mailto: faz no dispositivo de um visitantevisitante clicaem Enviara página não envianadaapp dee-mailconfigurado?um app dedesktop ou umhandlerum rascunho abreno app e na conta deleele clica emEnviar de novoou fecha o rascunhonadavisívelou um pedidoparaescolher umappmailto:simtalveznão
  1. O visitante clica em Enviar. O navegador não envia o formulário para lugar nenhum; ele entrega um link mailto: ao sistema operacional.
  2. Se não houver app de e-mail nem handler web configurado, o que é comum em notebooks de trabalho e para quem usa o Gmail no navegador, nada visível acontece ou o sistema pergunta qual app usar.
  3. Se houver um configurado, um rascunho abre no app de e-mail do próprio visitante, com os campos colados no corpo.
  4. O visitante precisa clicar em Enviar uma segunda vez, pela própria conta. Muitos fecham o rascunho, e você nunca fica sabendo que tentaram.
Todo passo depois do primeiro acontece no dispositivo do visitante, então você não consegue ver onde as pessoas desistem.

Quando uma mensagem chega, o corpo é feito de linhas name=value cruas, porque é isso que a codificação text/plain produz:

O que chega
name=Ada Lovelace
email=ada@example.com
message=Hi, do you take on small bathroom jobs in March?

Os outros caminhos até o Gmail funcionam, mas cada um precisa de um servidor rodando por sua conta:

CaminhoO que exigePorém
SMTP do Gmail com senha de appUm servidor que rode código, e verificação em duas etapas na conta GoogleA senha pode enviar como você de qualquer lugar, então nunca pode chegar ao navegador. O Google também limita quanto uma conta pessoal envia por dia
Google Apps Script com MailAppUm script publicado como web appContas pessoais podem mandar e-mail para 100 destinatários por dia a partir de scripts. A URL é pública e sem proteção contra spam, então um único bot pode esgotar a cota
Um backend de formuláriosA URL do backend no actionO e-mail vem do endereço do serviço, não do seu. O reply-to resolve a parte que importa

O Apps Script merece uma olhada mais de perto, porque é o caminho que a maioria dos tutoriais sugere. Você escreve uma função doPost, publica como um web app que qualquer um pode chamar e aponta o formulário para a URL dele. Funciona, mas um envio simples de formulário deixa o visitante numa página servida pelo domínio do Google em vez do seu, todo bot que encontrar a URL pode esgotar a cota do dia, e o script roda como você, então um bug nele pode mandar e-mail para qualquer pessoa a partir da sua conta. Além disso, toda mudança nos campos do formulário passa a ser responsabilidade sua.

Envie o formulário para o Gmail

Este é um formulário para um pequeno prestador de serviços. O campo job deixa a caixa de entrada fácil de percorrer, e email tem esse nome para que as respostas vão para o visitante:

contact.html
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post">
  <label for="name">Your name</label>
  <input id="name" name="name" autocomplete="name" required />

  <label for="email">Email for our reply</label>
  <input id="email" name="email" type="email" autocomplete="email" required />

  <label for="job">What do you need?</label>
  <select id="job" name="job" required>
    <option value="">Choose one</option>
    <option value="repair">A repair</option>
    <option value="quote">A quote for a new job</option>
    <option value="other">Something else</option>
  </select>

  <label for="message">Details</label>
  <textarea id="message" name="message" rows="5" required></textarea>

  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden />
  <button>Send to our inbox</button>
</form>
  1. Crie um formulário no Ikiform e troque frm_xxxxxxxxxxxxxxxx pelo id dele.
  2. Se você se cadastrou com seu endereço do Gmail, já recebe os e-mails como dono do workspace. Caso contrário, abra as configurações de Notifications do formulário, digite o endereço do Gmail em Add someone outside the workspace e clique em Send link.
  3. Abra o e-mail de confirmação no Gmail e confirme. Até lá, o endereço mostra Waiting for confirmation e não recebe nada.
  4. Adicione seu domínio em Allowed domains do formulário, publique a página e envie um teste.

Tire do spam com um filtro do Gmail

O primeiro e-mail de um remetente novo pode cair em Spam ou Promoções. Um filtro no remetente resolve isso de vez. No Gmail, abra as opções de pesquisa, coloque notifications@ikiform.com em De, clique em Criar filtro e marque Nunca enviar para spam, Aplicar o marcador, Sempre marcar como importante e Categorizar como: Principal, o que o mantém fora de Promoções.

Ou importe o filtro. Este é o formato que o próprio Exportar de filtros do Gmail grava; o Google não o documenta à parte, então se a importação falhar, crie o filtro à mão como acima. Salve como mailFilters.xml e vá em Configurações, Ver todas as configurações, Filtros e endereços bloqueados, Importar filtros:

mailFilters.xml
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:apps="http://schemas.google.com/apps/2006">
  <title>Mail Filters</title>
  <entry>
    <category term="filter"></category>
    <title>Mail Filter</title>
    <content></content>
    <apps:property name="from" value="notifications@ikiform.com"/>
    <apps:property name="label" value="Website"/>
    <apps:property name="shouldNeverSpam" value="true"/>
    <apps:property name="shouldAlwaysMarkAsImportant" value="true"/>
    <apps:property name="smartLabelToApply" value="^smartlabel_personal"/>
  </entry>
</feed>

Crie o marcador Website antes, ou renomeie-o no arquivo. Um único filtro cobre todos os formulários, porque todas as notificações vêm do mesmo endereço. Para separar formulários em marcadores diferentes, filtre pelo assunto, como subject:("New submission: Quote request").

O Gmail ignora pontos e tudo o que vem depois de um sinal de mais na parte antes do @. Adicionar you+site@gmail.com como destinatário entrega na sua caixa de entrada normal, e um filtro em Para consegue separar os e-mails do site de todo o resto. Ele conta como endereço de fora, então confirma por link como qualquer outro.

Respondendo pelo Gmail

O Gmail respeita o header reply-to, então Responder endereça ao visitante. Sua resposta sai do seu endereço do Gmail, sem o Ikiform em nenhum ponto da conversa.

  • Para responder pelo endereço da sua empresa, adicione-o em Configurações, Contas e importação, Enviar e-mail como, e escolha-o na linha De quando responder.
  • O Gmail pode agrupar notificações com o mesmo assunto numa única conversa, porque o assunto é sempre New submission: mais o nome do formulário. Desative a Visualização de conversa nas configurações do Gmail se preferir ver uma linha por mensagem.
  • Os resumos por hora não têm reply-to, já que cobrem muitos visitantes. Responda a eles pelos links do painel.

Confira se funciona

  1. Preencha o formulário na sua página e envie. Você cai na sua página de agradecimento, ou na hospedada pelo Ikiform.
  2. Encontre o e-mail no Gmail. Ele tem o seu marcador e não está em Spam nem em Promoções.
  3. Clique em Responder. A linha Para é o endereço digitado no formulário.
  4. 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.
  5. Não chegou nada? Mude o filtro de status do painel para Spam. Spam recebe a mesma resposta de sucesso de um envio real.

Pegadinhas

  • Aliases do Google Workspace. Se o destinatário é um alias ou um Google Group, as configurações do próprio grupo decidem se remetentes de fora são aceitos. Envie um teste antes de contar com isso.
  • A confirmação vai para o spam. O e-mail com o link de confirmação também vem do Ikiform. Se ele não aparecer, olhe em Spam e marque-o como não spam.
  • Vários endereços do Gmail. Cada formulário manda e-mail para até 10 endereços no total, e cada endereço de fora confirma separadamente.
  • Links mailto: antigos em outros lugares. Um link mailto: no rodapé não tem problema como link. O problema é só mailto: como action de um formulário.

Perguntas

Travou em algum passo ou quer um guia para o seu caso? Envie um e-mail para hello@ikiform.com.