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.
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::
<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 visitante clica em Enviar. O navegador não envia o formulário para lugar nenhum; ele entrega um link mailto: ao sistema operacional.
- 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.
- Se houver um configurado, um rascunho abre no app de e-mail do próprio visitante, com os campos colados no corpo.
- O visitante precisa clicar em Enviar uma segunda vez, pela própria conta. Muitos fecham o rascunho, e você nunca fica sabendo que tentaram.
Quando uma mensagem chega, o corpo é feito de linhas name=value cruas, porque é isso que a codificação text/plain produz:
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:
| Caminho | O que exige | Porém |
|---|---|---|
| SMTP do Gmail com senha de app | Um servidor que rode código, e verificação em duas etapas na conta Google | A 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 MailApp | Um script publicado como web app | Contas 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ários | A URL do backend no action | O 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:
<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>- Crie um formulário no Ikiform e troque
frm_xxxxxxxxxxxxxxxxpelo id dele. - 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.
- 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.
- 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:
<?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").
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
- Preencha o formulário na sua página e envie. Você cai na sua página de agradecimento, ou na hospedada pelo Ikiform.
- Encontre o e-mail no Gmail. Ele tem o seu marcador e não está em Spam nem em Promoções.
- Clique em Responder. A linha Para é o endereço digitado no formulário.
- 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. - 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:comoactionde um formulário.
Perguntas
Sim. Um endereço do Workspace funciona como qualquer outro destinatário. Se for um Google Group ou um alias, confira se o grupo aceita e-mails de remetentes de fora e depois envie um teste.
Um action mailto: nunca envia. Ele pede ao dispositivo do visitante que abra um app de e-mail com um rascunho. Se não houver nenhum configurado, nada visível acontece, e se houver, o visitante ainda precisa clicar em Enviar nele.
Só a partir de um servidor seu, com uma senha de app numa conta que tenha verificação em duas etapas. Nunca coloque essa senha em código do navegador; ela pode enviar e-mails como você.
Crie um filtro no Gmail para e-mails de notifications@ikiform.com e marque Nunca enviar para spam. Aplique um marcador ao mesmo tempo, para as mensagens do formulário ficarem fáceis de achar.
Sim, quando o campo de e-mail do formulário se chama email, email_address, your_email, reply_to, contact_email, ou quando o formulário envia um campo _replyto. Aí o Gmail coloca o visitante na linha Para quando você clica em Responder.
Travou em algum passo ou quer um guia para o seu caso? Envie um e-mail para hello@ikiform.com.