guia · API do Mailgun
Como uma equipe de produto deve implementar a API do Mailgun com segurança?
Implemente a API do Mailgun atrás de um worker de servidor autorizado. Verifique o domínio de envio exato, use a credencial de API mais restrita disponível, crie um job de envio interno durável e envie dados de formulário multipart para o endpoint Messages com escopo por domínio. Armazene o identificador de mensagem retornado pelo Mailgun, autentique as requisições de webhook antes de processá-las, elimine eventos duplicados e aplique bounces, reclamações e descadastros no momento do envio. Mantenha a aceitação pela API, o processamento no Mailgun, a entrega ao servidor receptor e a chegada à caixa de entrada como estados separados.
Defina uma operação de produto restrita antes de chamar o Mailgun
Comece com um evento de produto aprovado, como verificação de conta, recibo, alerta de segurança ou uma notificação solicitada pelo destinatário. Coloque o Mailgun atrás de um serviço de aplicação confiável ou de um worker de fila, em vez de expor uma credencial do provedor ou um formulário de mensagem arbitrário a navegadores e clientes móveis. Autorize o chamador, o tenant, a identidade do remetente, o destinatário, a classe de mensagem e o template antes de montar os campos do provedor. Persista um registro de saída interno com uma chave de evento estável, tenant, revisão do template, endereços aprovados e estado inicial. Esse registro é o sistema de decisão; o Mailgun é a dependência de transporte. Separar a intenção de negócio dos payloads do provedor torna as novas tentativas e as auditorias mais seguras e mantém possível uma migração de provedor no futuro. Tráfego transacional e tráfego dependente de consentimento devem continuar distintos no modelo de dados, para que preferências dos destinatários, regras de supressão e incidentes de reputação não virem uma convenção informal de templates.
Verifique o domínio de envio exato e os registros DNS
Adicione um domínio controlado pela organização e publique os registros DNS que o Mailgun fornece atualmente para verificação, autenticação, rastreamento e os recursos de recebimento de fato selecionados. Revise os registros SPF e DMARC existentes antes de alterar o DNS. Não crie um segundo registro SPF em um mesmo hostname nem substitua uma política DMARC organizacional sem o seu responsável. Verifique a identidade From e de assinatura efetivamente usada pela carga de trabalho, não apenas um domínio pai adjacente. Use um subdomínio específico para o propósito quando a responsabilidade, a separação de tráfego ou a migração justificarem. Depois que o Mailgun informar a verificação, inspecione uma mensagem recebida controlada para conferir o endereço From visível, o domínio de assinatura DKIM, o return path, os resultados de autenticação e o comportamento das respostas. A verificação do provedor é evidência de que a checagem de configuração dele passou. Ela não comprova o consentimento do destinatário, a aceitação no destino, a reputação do remetente nem a chegada à caixa de entrada. Mantenha o histórico de mudanças de DNS e as instruções de rollback fora do painel do provedor.
Use credenciais com escopo e o endpoint regional correto
O Mailgun documenta autenticação HTTP Basic para suas APIs, com credenciais de API que variam por autoridade e finalidade. Um worker de envio deve receber apenas a credencial necessária para o domínio e a operação aprovados. Mantenha separadas as chaves principais da conta, as chaves de envio por domínio, o material de assinatura de webhooks e as credenciais dos ambientes inferiores. Armazene os segredos diretamente em um cofre de segredos gerenciado e exponha-os apenas ao processo de servidor que precisa deles. Nunca coloque credenciais em código do cliente, controle de versão, URLs, logs, analytics, templates, tickets ou prompts. Selecione a URL base da API documentada para a região da conta, em vez de presumir que todos os domínios usam o mesmo host. Ensaie a rotação criando uma credencial substituta com escopo equivalente, atualizando o worker, verificando tráfego e eventos controlados e só então revogando a credencial antiga. Gere alertas para falhas inesperadas de autenticação e autorização, porque podem sinalizar revogação, região incorreta, desvio de escopo ou exposição.
Monte uma única requisição durável à Messages API
O endpoint Messages do Mailgun, com escopo por domínio, aceita campos de formulário multipart para remetente, destinatários, assunto, conteúdo em texto ou HTML e opções documentadas como templates, anexos, cabeçalhos, tags, variáveis por destinatário, rastreamento e entrega agendada. Exponha apenas o subconjunto de que o produto precisa. Valide a sintaxe dos endereços e a posse pelo tenant, limite a quantidade de destinatários e anexos, rejeite injeção de quebras de linha e renderize templates aprovados com variáveis tipadas. Não coloque segredos ou dados pessoais desnecessários em tags, variáveis personalizadas ou cabeçalhos, porque os eventos do provedor e as telas de atividade podem expor metadados separadamente do conteúdo da mensagem. Envie a partir do job interno reivindicado e armazene o identificador de mensagem retornado pelo Mailgun junto com a tentativa exata. Mantenha os nomes de opções específicos do provedor dentro de um único adaptador. O código de negócio deve receber um resultado restrito, como aceito, rejeitado ou incerto, em vez de conhecer todos os campos e formatos de erro do Mailgun.
Projete as novas tentativas em torno da aceitação e da ambiguidade
Classifique as respostas antes de tentar novamente. Corrija campos malformados, domínios não autorizados, credenciais inválidas, falhas de permissão e erros permanentes de política, em vez de reenviá-los. Tente novamente falhas de transporte elegíveis, erros de servidor do provedor e requisições limitadas por taxa com backoff exponencial, jitter, um número finito de tentativas e limites de idade da fila. A resposta de aceitação da API do Mailgun significa que o provedor aceitou a requisição de envio para processamento; ela não prova que o servidor de destino aceitou a mensagem. Um timeout no cliente é ambíguo, porque o Mailgun pode ter aceitado a requisição mesmo que o worker não tenha recebido a resposta. Mantenha esse job em estado desconhecido, procure os dados de correlação armazenados ou eventos posteriores e aplique uma regra de reconciliação deliberada antes de reenviar. O transporte do Mailgun não elimina a necessidade de uma chave estável de evento da aplicação, reivindicação por um único worker, histórico de tentativas e controles contra o risco de duplicatas. Gere alertas sobre falhas repetidas por credencial, domínio, template, tenant e provedor de destino.
Autentique as requisições de webhook antes do parsing
Configure um endpoint de webhook HTTPS e preserve os campos exatos usados no procedimento de assinatura do Mailgun. O Mailgun documenta um timestamp, um token e uma assinatura derivada com a chave de assinatura do webhook. Valide a assinatura usando uma comparação em tempo constante e rejeite timestamps fora da janela de validade da aplicação antes de aceitar o evento. Acompanhe tokens ou identificadores de evento conforme necessário para resistir a replay. Mantenha a chave de assinatura do webhook separada das credenciais de envio e rotacione-a por um processo testado. Aplique limites de tamanho às requisições e não confie em URLs, destinatários, tags ou campos de evento só porque o corpo foi interpretado sem erro. Após a autenticação, armazene ou enfileire o evento de forma durável antes de retornar sucesso. Isso evita que uma queda do processo descarte evidências de entrega. A verificação do webhook comprova origem e integridade sob o segredo configurado; ela não comprova que o evento de negócio pertence ao tenant esperado até que a aplicação correlacione o domínio e os identificadores de mensagem do provedor.
Trate novas tentativas de webhook e eventos duplicados de forma idempotente
O Mailgun documenta o comportamento de novas tentativas de webhook quando um endpoint não retorna a resposta de sucesso esperada. O receptor deve presumir entregas atrasadas e repetidas. Elimine duplicatas com base em um identificador de evento estável do provedor, quando existir, ou em uma chave composta conservadora que não consiga misturar destinatários ou tipos de evento diferentes. Preserve separadamente o horário original da ocorrência e o horário de processamento. Torne as transições de estado monotônicas, para que uma observação mais antiga de accepted ou delivered não apague uma falha permanente, reclamação ou descadastro posterior só porque as novas tentativas chegaram fora de ordem. Retorne sucesso apenas após a captura durável, mas mantenha o processamento de negócio pesado assíncrono, para que o endpoint continue confiável. Monitore falhas de assinatura, latência de resposta, volume de novas tentativas, atraso dos eventos e registros em dead-letter. Guarde os payloads brutos do provedor apenas pelo tempo que as necessidades operacionais e de política justificarem, com acesso restrito e minimização de endereços. Um webhook é uma fonte de evidências, não uma permissão para expor o histórico de destinatários entre tenants.
Modele os eventos do Mailgun sem exagerar a entrega
O Mailgun documenta tipos de evento para accepted, delivered, falha temporária e permanente, opened, clicked, unsubscribed, complained, stored e resultados de processamento relacionados. Mapeie esses nomes para um modelo interno, mantendo o tipo de evento do provedor, o identificador da mensagem, o escopo de destinatários, o timestamp, a severidade e a resposta SMTP disponível. Accepted descreve a entrada no Mailgun ou o progresso na fila. Delivered descreve a observação de entrega documentada, geralmente a aceitação pelo servidor de destino, mas não revela a pasta final na caixa postal. Aberturas e cliques são instrumentação de engajamento, não prova de transporte, e tecnologias de privacidade podem afetá-los. Falhas temporárias podem justificar novas tentativas limitadas dentro do sistema de transporte; falhas permanentes, reclamações e descadastros precisam atualizar o estado de segurança dos destinatários antes que qualquer job posterior da aplicação seja enviado. Mantenha o registro de eventos somente de acréscimo (append-only) e derive o status exibido ao usuário por regras explícitas, para que o suporte consiga distinguir evidência de interpretação.
Aplique falhas, reclamações e descadastros no momento do envio
O Mailgun documenta o rastreamento de falhas de entrega, reclamações de spam e descadastros. Ingira esses sinais em um modelo de segurança de destinatários do próprio produto, com tenant, endereço, classe de mensagem, evento de origem, motivo e horário de vigência. Verifique esse estado imediatamente antes de cada envio, não apenas quando uma lista de campanha é importada. Um bounce permanente ou uma reclamação deve interromper novas tentativas inseguras no escopo aplicável. O tratamento de descadastros precisa respeitar a classe de mensagem e os requisitos atuais dos receptores ou legais; ele não deve ser contornado rotineiramente por opções do provedor. Proteja qualquer remoção manual com autorização forte, um motivo visível e histórico de auditoria. Os dados de supressão do provedor são evidências operacionais valiosas, mas não são um registro completo de consentimento. Preserve separadamente a origem do consentimento, as preferências, as decisões de política críticas para o produto e o histórico anterior do provedor, para que uma migração não descarte a proteção dos destinatários. Teste a propagação de supressões, reclamações duplicadas, bounces atrasados e reativações excepcionais com identidades controladas.
Considere o SendHQ como uma alternativa ao Mailgun
O SendHQ oferece e-mail transacional e e-mail de marketing baseado em permissão, com envio com domínio verificado, e-mail de entrada, eventos de entrega e supressões. Revise a documentação pública da API e teste autenticação, payloads, erros, identificadores, eventos, domínios e fluxos de segurança do destinatário antes de migrar.
Perguntas frequentes
Qual endpoint envia e-mails pela API do Mailgun?
O Mailgun documenta um endpoint `POST /v3/{domain}/messages` com escopo por domínio, que usa dados de formulário multipart e autenticação HTTP Basic. Chame-o apenas a partir de código autorizado no servidor.
Uma chave de API do Mailgun pode ficar no código do navegador?
Não. Armazene a credencial adequada mais restrita em um gerenciador de segredos no servidor. Mantenha separadas as autoridades de produção, dos ambientes inferiores, de administração da conta, de envio por domínio e de assinatura de webhooks.
A aceitação pela API do Mailgun significa que o e-mail foi entregue?
Não. Significa que o Mailgun aceitou o envio para processamento. Eventos autenticados podem informar depois a entrega ao servidor de destino ou uma falha, enquanto a chegada à caixa de entrada continua sendo um resultado separado, do lado do receptor.
Como os webhooks do Mailgun devem ser autenticados?
Valide o timestamp, o token e a assinatura documentados pelo Mailgun com a chave de assinatura do webhook antes do processamento. Aplique controles de validade e contra replay e depois capture o evento de forma durável antes de confirmá-lo.
Toda falha da API do Mailgun deve ser tentada novamente?
Não. Corrija erros de validação, autenticação, domínio, permissão e de política permanente. Use backoff limitado para falhas transitórias elegíveis e reconcilie timeouts ambíguos antes de reenviar.
O SendHQ pode substituir o Mailgun?
Possivelmente. O SendHQ oferece e-mail transacional e e-mail de marketing baseado em permissão, com envio com domínio verificado, e-mail de entrada, eventos de entrega e supressões. Revise a documentação pública da API e teste sua integração antes de migrar.
Fontes
- Mailgun Messages API — Mailgun (em inglês)
- Mailgun API Authentication — Mailgun (em inglês)
- Verify a Mailgun Domain — Mailgun (em inglês)
- Mailgun Event Types — Mailgun (em inglês)
- Securing Mailgun Webhooks — Mailgun (em inglês)
- Mailgun Webhook Retries — Mailgun (em inglês)
- Tracking Mailgun Delivery Failures — Mailgun (em inglês)
- Tracking Mailgun Spam Complaints — Mailgun (em inglês)
- Tracking Mailgun Unsubscribes — Mailgun (em inglês)
- RFC 5321: Simple Mail Transfer Protocol — RFC Editor (em inglês)
- Contrato OpenAPI do SendHQ — SendHQ