Conector Mailgun

Conecte o Mailgun ao Brevo através do Tajo para unificar seus dados de e-mail transacional e de marketing, sincronizar eventos de entrega e métricas de engajamento, e consolidar sua infraestrutura de e-mail em uma única visão do cliente.

Visão geral

PropriedadeValor
PlataformaMailgun (by Sinch)
CategoriaE-mail Marketing
Complexidade de configuraçãoFácil
Integração oficialNão
Dados sincronizadosEventos, Contatos, Entregabilidade, Campanhas
Método de autenticaçãoChave API (HTTP Basic Auth)

Recursos

  • Sincronização de eventos de entrega - Rastreie eventos de entregue, com bounce, aberto e clicado
  • Métricas de engajamento - Sincronize taxas de abertura e clique para atributos de contato do Brevo
  • Gestão de bounces - Suprima automaticamente endereços com bounce no Brevo
  • Tratamento de reclamações - Sincronize reclamações de spam para higiene de lista
  • Reputação de domínio - Monitore a saúde do domínio de envio e a entregabilidade
  • Rastreamento de e-mail transacional - Correlacione envios transacionais com dados de marketing

Pré-requisitos

Antes de começar, certifique-se de ter:

  1. Uma conta Mailgun com um domínio de envio verificado
  2. Uma chave API do Mailgun no Mailgun Dashboard
  3. Uma conta Brevo com acesso à API
  4. Uma conta Tajo com permissões de conector

Autenticação

Autenticação por chave API

O Mailgun usa HTTP Basic Authentication com api como nome de usuário e sua chave API como senha:

Terminal window
# Get your API key from https://app.mailgun.com/settings/api_security
export MAILGUN_API_KEY=key-your-api-key
export MAILGUN_DOMAIN=your-domain.com
export TAJO_API_KEY=your_tajo_api_key
export BREVO_API_KEY=your_brevo_api_key
// HTTP Basic Auth format
const headers = {
'Authorization': `Basic ${Buffer.from(
`api:${process.env.MAILGUN_API_KEY}`
).toString('base64')}`
};
// Or using curl
// curl -s --user 'api:YOUR_API_KEY' ...

Tipos de chave API

O Mailgun fornece chaves de envio específicas de domínio e chaves API de nível de conta. Use chaves de envio de domínio para operações de mensagem e a chave API da conta para operações de gerenciamento.

Configuração

Configuração básica

connectors:
mailgun:
enabled: true
api_key: "${MAILGUN_API_KEY}"
domain: "${MAILGUN_DOMAIN}"
region: "us" # or "eu" for EU region
sync:
events: true
contacts: true
bounces: true
complaints: true
schedule: "*/15 * * * *" # Every 15 minutes
webhook:
signing_key: "${MAILGUN_WEBHOOK_SIGNING_KEY}"
lists:
engaged: 30
bounced: 31
complained: 32

Mapeamento de campos

field_mapping:
email: email
first_name: FIRSTNAME
last_name: LASTNAME
open_rate: MG_OPEN_RATE
click_rate: MG_CLICK_RATE
last_delivered: MG_LAST_DELIVERED
bounce_type: MG_BOUNCE_TYPE
engagement_score: MG_ENGAGEMENT
unsubscribed: MG_UNSUBSCRIBED

Endpoints da API

EndpointMétodoDescrição
https://api.mailgun.net/v3/{domain}/messagesPOSTEnviar mensagens de e-mail
https://api.mailgun.net/v3/{domain}/eventsGETConsultar logs de eventos
https://api.mailgun.net/v3/{domain}/bouncesGETListar bounces
https://api.mailgun.net/v3/{domain}/complaintsGETListar reclamações
https://api.mailgun.net/v3/{domain}/unsubscribesGETListar descadastros
https://api.mailgun.net/v3/{domain}/tagsGETListar tags
https://api.mailgun.net/v3/{domain}/tags/{tag}/statsGETObter estatísticas de tag
https://api.mailgun.net/v3/listsGETListar mailing lists
https://api.mailgun.net/v3/domainsGETListar domínios
https://api.mailgun.net/v4/address/validatePOSTValidar endereço de e-mail

Região da UE

Para contas Mailgun baseadas na UE, use https://api.eu.mailgun.net em vez de https://api.mailgun.net para todos os endpoints da API.

Exemplos de código

Inicializar o conector

import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({
apiKey: process.env.TAJO_API_KEY,
brevoApiKey: process.env.BREVO_API_KEY
});
await tajo.connectors.connect('mailgun', {
apiKey: process.env.MAILGUN_API_KEY,
domain: process.env.MAILGUN_DOMAIN,
region: 'us'
});

Enviar uma mensagem via Mailgun API

// Send an email using Mailgun's Messages API
const formData = new URLSearchParams();
formData.append('from', `Your App <noreply@${domain}>`);
formData.append('to', '[email protected]');
formData.append('subject', 'Welcome to our platform');
formData.append('html', '<h1>Welcome!</h1><p>Thanks for signing up.</p>');
formData.append('o:tag', 'welcome-email');
formData.append('o:tracking', 'yes');
const response = await fetch(
`https://api.mailgun.net/v3/${domain}/messages`,
{
method: 'POST',
headers: {
'Authorization': `Basic ${Buffer.from(`api:${apiKey}`).toString('base64')}`
},
body: formData
}
);
const result = await response.json();
// { id: '<[email protected]>', message: 'Queued. Thank you.' }

Sincronizar eventos de e-mail para o Brevo

// Query Mailgun events and sync engagement data
const eventsResponse = await fetch(
`https://api.mailgun.net/v3/${domain}/events?` +
new URLSearchParams({
begin: lastSyncDate,
ascending: 'yes',
limit: 300,
event: 'delivered OR opened OR clicked'
}),
{
headers: {
'Authorization': `Basic ${Buffer.from(`api:${apiKey}`).toString('base64')}`
}
}
);
const { items, paging } = await eventsResponse.json();
for (const event of items) {
const email = event.recipient;
switch (event.event) {
case 'delivered':
await tajo.contacts.update(email, {
attributes: { MG_LAST_DELIVERED: event.timestamp }
});
break;
case 'opened':
await tajo.events.track({
email,
event: 'email_opened',
properties: { subject: event.message.headers.subject }
});
break;
case 'clicked':
await tajo.events.track({
email,
event: 'email_clicked',
properties: { url: event.url }
});
break;
}
}
// Follow pagination for more events
if (paging.next) {
// Fetch next page using paging.next URL
}

Tratar webhooks do Mailgun

const crypto = require('crypto');
app.post('/webhooks/mailgun', async (req, res) => {
// Verify webhook signature
const { timestamp, token, signature } = req.body.signature;
const encodedToken = crypto
.createHmac('sha256', process.env.MAILGUN_WEBHOOK_SIGNING_KEY)
.update(timestamp.concat(token))
.digest('hex');
if (encodedToken !== signature) {
return res.status(401).send('Unauthorized');
}
const eventData = req.body['event-data'];
const event = eventData.event;
const email = eventData.recipient;
await tajo.connectors.handleWebhook('mailgun', {
topic: event,
payload: eventData
});
// Handle bounce suppression
if (event === 'failed' && eventData.severity === 'permanent') {
await tajo.contacts.update(email, {
attributes: { MG_BOUNCE_TYPE: 'hard_bounce' },
emailBlacklisted: true
});
}
res.status(200).send('OK');
});

Sincronizar bounces e reclamações

// Sync bounced addresses for list hygiene
const bouncesResponse = await fetch(
`https://api.mailgun.net/v3/${domain}/bounces?limit=100`,
{
headers: {
'Authorization': `Basic ${Buffer.from(`api:${apiKey}`).toString('base64')}`
}
}
);
const { items: bounces } = await bouncesResponse.json();
for (const bounce of bounces) {
await tajo.contacts.update(bounce.address, {
attributes: {
MG_BOUNCE_TYPE: bounce.error.includes('550') ? 'hard_bounce' : 'soft_bounce',
MG_BOUNCE_DATE: bounce.created_at
},
emailBlacklisted: bounce.error.includes('550')
});
}

Limites de taxa

EndpointLimiteObservações
Messages APIVaria por plano100/hora (grátis), ilimitado (pagos)
Events APISem limite explícitoUse paginação com máx. 300 itens
Validation APIBaseado no planoPagamento por validação
WebhooksTempo realSem limite de taxa na entrega
Suppressions APISem limite explícitoAplica-se rate limiting padrão

Limites de envio

O Mailgun aplica limites de envio baseados no seu plano e na reputação do domínio. Novos domínios começam com limites menores que aumentam conforme a reputação do remetente melhora. Monitore as estatísticas do seu domínio no dashboard do Mailgun.

Solução de problemas

ProblemaCausaSolução
401 UnauthorizedChave API inválidaVerifique a chave API no dashboard do Mailgun
Domínio não verificadoRegistros DNS ausentesAdicione os registros TXT, CNAME, MX necessários
Webhook não recebidoURL não acessívelCertifique-se de que a URL do webhook seja acessível publicamente
Eventos ausentesIntervalo de tempo muito estreitoExpanda os parâmetros begin/end
Baixa entregabilidadeReputação de domínioVerifique as estatísticas do domínio e a autenticação

Modo de depuração

connectors:
mailgun:
debug: true
log_level: verbose
log_webhooks: true
log_events: true

Melhores práticas

  1. Verifique domínios de envio - Complete a verificação DNS para entregabilidade ideal
  2. Use webhooks para eventos - Entrega de webhook em tempo real vs. polling da Events API
  3. Trate bounces proativamente - Suprima hard bounces imediatamente no Brevo
  4. Marque suas mensagens com tags - Use tags para categorizar e analisar o desempenho de e-mail
  5. Monitore a reputação do domínio - Acompanhe métricas de entregabilidade no dashboard do Mailgun
  6. Use validação de e-mail - Valide endereços antes de adicioná-los a listas do Brevo

Segurança

  • HTTP Basic Auth - Chave API transmitida via cabeçalho Authorization
  • Assinaturas de webhook - Verificação de assinatura HMAC-SHA256
  • Verificação de domínio - Autenticação DNS SPF, DKIM e DMARC
  • IP whitelisting - Disponível para planos de IP dedicado
  • Criptografia TLS - Todos os endpoints da API exigem HTTPS
  • Rotação de chave - Rotacione as chaves API periodicamente via dashboard do Mailgun

Recursos relacionados

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
Assistente AI

Olá! Pergunte-me qualquer coisa sobre a documentação.