O e-mail é a única integração que toda organização já possui. Fornecedores enviam faturas, formulários entregam respostas e máquinas disparam alertas. A ingestão de e-mails transforma tudo isso em uma interface, em vez de uma tarefa manual: um script se conecta a uma caixa postal, lê o que chegou e executa uma ação.
É um padrão antigo e pouco valorizado, pois a alternativa, pedir a cada parceiro que adote sua API, normalmente nem sequer existe. Este artigo explica quando ele é útil, como criar uma implementação resistente a falhas e em quais situações um webhook é realmente a melhor opção.
Para que serve a ingestão de e-mails por IMAP
A ingestão de e-mails é útil sempre que o remetente não quer ou não consegue se integrar diretamente ao seu sistema.
Documentos enviados por parceiros. Faturas, pedidos de compra, comprovantes de entrega e extratos chegam como anexos de organizações que nunca desenvolverão uma integração com seu sistema. Muitas vezes, basta um script que os arquive por remetente e número de referência.
Alertas de equipamentos. Muitos dispositivos só conseguem enviar e-mails, como sistemas de backup, ferramentas de monitoramento e equipamentos industriais antigos. A ingestão por IMAP oferece um único ponto de coleta para todos eles.
Respostas de formulários e mensagens recebidas. Isso inclui qualquer sistema que envie uma mensagem estruturada por e-mail, como notificações de devolução e respostas automáticas de ausência sobre as quais você precise agir.
Aprovações por resposta. Quando alguém responde "sim" a uma mensagem, essa resposta representa uma etapa do fluxo de trabalho. Lê-la de forma programática costuma ser mais simples do que criar uma interface que ninguém quer acessar.
Como configurar uma solução resistente a falhas
O funcionamento básico da ingestão de e-mails não tem nada de extraordinário. A confiabilidade vem de algumas decisões importantes.
Use uma caixa postal exclusiva. Não utilize uma pasta dentro da caixa de alguém nem compartilhe as mesmas mensagens com uma pessoa. Um endereço dedicado impede que alguém, ao organizar a caixa, quebre as premissas do script. Aqui, isso não gera custo adicional porque não cobramos por usuário.
Use uma credencial limitada a essa tarefa. Não use os dados de acesso de uma pessoa. Se a credencial do script vazar ou precisar ser trocada, somente o script deve ser afetado.
Mova as mensagens processadas, não as exclua. Uma pasta "processados" fornece uma trilha de auditoria e permite repetir o processamento depois de corrigir um erro. A exclusão torna cada equívoco permanente, e equívocos acontecerão.
Esteja preparado para receber a mesma mensagem duas vezes. Novas tentativas, reconexões e reprocessamentos são inevitáveis. Usar o Message-ID como chave e ignorar tudo o que já foi visto transforma o processamento duplicado de um problema de dados em uma operação sem efeito.
Torne as falhas visíveis. Quando um script deixa de ler uma caixa postal, ninguém percebe até perguntar onde foram parar as faturas. Ele deve emitir um alerta quando não tiver sido executado, não apenas quando encontrar um erro.
Por que o IMAP é adequado
A ingestão de e-mails funciona por IMAP porque o protocolo funciona como um verdadeiro sistema de arquivos remoto para mensagens, não como um simples método de download.
É possível pesquisar no servidor, buscar apenas os cabeçalhos antes de decidir se o corpo deve ser baixado, mover mensagens entre pastas e definir marcadores, tudo isso sem baixar a caixa inteira. Assim, o script pode ser seletivo e econômico, algo importante quando a caixa contém anos de histórico.
O IMAP também é aceito universalmente, e esse é o verdadeiro argumento a seu favor. Todas as linguagens têm uma biblioteca, o protocolo não sofreu mudanças que quebrassem implementações e um script criado hoje continuará funcionando daqui a dez anos. Poucas APIs de fornecedores oferecem uma garantia tão forte.
Também vale saber que o plano gratuito inclui IMAP. Portanto, uma caixa de ingestão usada apenas para receber não custa nada. Ela não pode enviar mensagens, então qualquer processo que responda automaticamente precisa de um plano pago ou de um perfil SMTP próprio.
O custo de operação
O custo costuma surpreender porque é menor do que a maioria das pessoas imagina.
Uma caixa de ingestão é uma caixa postal comum, e a quantidade de caixas é limitada pela categoria do plano, não cobrada individualmente. Portanto, adicionar o décimo segundo endereço de ingestão não gera custo marginal. É isso que torna uma caixa por origem uma solução prática, não um luxo. Na realidade, o que você consome é o armazenamento compartilhado e o tempo de alguém quando algo dá errado.
Isso muda as decisões de arquitetura em comparação com plataformas que cobram por usuário. Nelas, a ingestão costuma ser concentrada em um único endereço sobrecarregado porque cada novo endereço custa dinheiro. O script resultante precisa então separar vários fluxos sem relação entre si. Aqui, a opção mais econômica também é a mais organizada.
Quando um webhook é melhor
Ser claro sobre esse ponto evita a construção da solução errada.
Se o parceiro oferece um webhook, use-o. O envio ativo é melhor do que consultas periódicas em latência, confiabilidade e clareza: você recebe dados estruturados assim que algo acontece, em vez de descobrir a ocorrência na consulta seguinte e precisar interpretar texto. A ingestão de e-mails é a alternativa para quando essa opção não existe.
As consultas periódicas também têm um limite razoável. Verificar a caixa a cada minuto é aceitável; consultá-la a cada segundo é um abuso e causará limitação de frequência. Se a necessidade for realmente em tempo real, o e-mail será o meio errado, independentemente da forma de leitura.
Além disso, tentar interpretar e-mails escritos por pessoas é uma batalha perdida. Extrair um número de pedido de compra de uma mensagem gerada por máquina é confiável. Tentar deduzir a intenção de um parágrafo escrito por uma pessoa não é, e um fluxo que depende disso produzirá uma sequência constante de falhas que ninguém conseguirá corrigir.
Como escalar para além de uma caixa postal
A ingestão de e-mails se adapta bem a diferentes escalas, e sua arquitetura depende da quantidade de fluxos existentes.
Para poucas origens, uma caixa postal por origem é a solução mais clara. Cada script lê o próprio endereço e uma alteração em um fluxo não afeta os outros. Como a quantidade de caixas é limitada pela categoria do plano, em vez de ser cobrada individualmente, vinte endereços de ingestão custam o mesmo que um.
Para muitas origens do mesmo tipo, uma única caixa com um catch-all na frente funciona melhor: invoice-acme@ e invoice-globex@ chegam ao mesmo lugar, enquanto o próprio endereço fornece ao script as informações necessárias para o roteamento. É a mesma técnica de um alias para cada cadastro, usada para máquinas em vez de fornecedores.
Quando o volume for realmente alto, lembre-se de que o armazenamento é compartilhado. Uma caixa de ingestão que acumula anexos consumirá esse espaço. Por isso, uma cota e uma política de retenção devem fazer parte do projeto desde o início, e não ser descobertas mais tarde. O tema é explicado em cotas de armazenamento para caixas postais.