Mailgun-koppling

Anslut Mailgun till Brevo via Tajo för att enhetliga dina transaktions- och marknadsföringsmejldata, synka leveranshändelser och engagemangsmått och konsolidera din e-postinfrastruktur till en enda kundvy.

Översikt

EgenskapVärde
PlattformMailgun (av Sinch)
KategoriE-postmarknadsföring
InstallationskomplexitetEnkel
Officiell integrationNej
Data som synkasHändelser, kontakter, leveransbarhet, kampanjer
AutentiseringsmetodAPI-nyckel (HTTP Basic Auth)

Funktioner

  • Synk av leveranshändelser - Spåra händelser för delivered, bounced, opened och clicked
  • Engagemangsmått - Synka öppnings- och klickfrekvenser till Brevo-kontaktattribut
  • Bouncehantering - Undertryck automatiskt studsade adresser i Brevo
  • Klagomålshantering - Synka spam-klagomål för listhygien
  • Domänreputation - Övervaka avsändardomänens hälsa och leveransbarhet
  • Spårning av transaktionsmejl - Korrelera transaktionsutskick med marknadsföringsdata

Förutsättningar

Innan du börjar, se till att du har:

  1. Ett Mailgun-konto med en verifierad avsändardomän
  2. En Mailgun API-nyckel från Mailgun Dashboard
  3. Ett Brevo-konto med API-åtkomst
  4. Ett Tajo-konto med kopplingsbehörigheter

Autentisering

API-nyckelautentisering

Mailgun använder HTTP Basic Authentication med api som användarnamn och din API-nyckel som lösenord:

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' ...

Typer av API-nycklar

Mailgun tillhandahåller domänspecifika avsändarnycklar och API-nycklar på kontonivå. Använd domänavsändarnycklar för meddelandeoperationer och API-nyckeln på kontonivå för hanteringsoperationer.

Konfiguration

Grundläggande konfiguration

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

Fältmappning

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

API-ändpunkter

ÄndpunktMetodBeskrivning
https://api.mailgun.net/v3/{domain}/messagesPOSTSkicka e-postmeddelanden
https://api.mailgun.net/v3/{domain}/eventsGETFråga händelseloggar
https://api.mailgun.net/v3/{domain}/bouncesGETLista studsar
https://api.mailgun.net/v3/{domain}/complaintsGETLista klagomål
https://api.mailgun.net/v3/{domain}/unsubscribesGETLista avprenumerationer
https://api.mailgun.net/v3/{domain}/tagsGETLista taggar
https://api.mailgun.net/v3/{domain}/tags/{tag}/statsGETHämta taggstatistik
https://api.mailgun.net/v3/listsGETLista utskickslistor
https://api.mailgun.net/v3/domainsGETLista domäner
https://api.mailgun.net/v4/address/validatePOSTValidera e-postadress

EU-region

För EU-baserade Mailgun-konton, använd https://api.eu.mailgun.net istället för https://api.mailgun.net för alla API-ändpunkter.

Kodexempel

Initiera kopplingen

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'
});

Skicka ett meddelande 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.' }

Synka e-posthändelser till 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
}

Hantera Mailgun-webhooks

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');
});

Synka studsar och klagomål

// 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')
});
}

API-gränser

ÄndpunktGränsNoteringar
Messages APIVarierar per plan100/h (gratis), obegränsat (betald)
Events APIIngen explicit gränsAnvänd paginering med max 300 objekt
Validation APIBaserat på planBetala per validering
WebhooksRealtidIngen rate limit på leverans
Suppressions APIIngen explicit gränsStandard rate limiting tillämpas

Utskicksgränser

Mailgun tillämpar utskicksgränser baserat på din plan och domänreputation. Nya domäner börjar med lägre gränser som ökar när din avsändarreputation förbättras. Övervaka din domänstatistik i Mailgun-dashboarden.

Felsökning

ProblemOrsakLösning
401 UnauthorizedOgiltig API-nyckelVerifiera API-nyckeln i Mailgun-dashboarden
Domänen är inte verifieradDNS-poster saknasLägg till nödvändiga TXT-, CNAME- och MX-poster
Webhook tas inte emotURL ej åtkomligSäkerställ att webhook-URL:en är publikt nåbar
Händelser saknasTidsintervallet är för snävtUtöka parametrarna begin/end
Låg leveransbarhetDomänreputationKontrollera domänstatistik och autentisering

Debug-läge

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

Bästa praxis

  1. Verifiera avsändardomäner - Slutför DNS-verifiering för optimal leveransbarhet
  2. Använd webhooks för händelser - Webhook-leverans i realtid är bättre än att pollla Events API:et
  3. Hantera studsar proaktivt - Undertryck hårda studsar omedelbart i Brevo
  4. Tagga dina meddelanden - Använd taggar för att kategorisera och analysera e-postprestanda
  5. Övervaka domänreputation - Följ leveransmått i Mailgun-dashboarden
  6. Använd e-postvalidering - Validera adresser innan du lägger till dem i Brevo-listor

Säkerhet

  • HTTP Basic Auth - API-nyckel skickas via Authorization-header
  • Webhook-signaturer - Verifiering med HMAC-SHA256-signatur
  • Domänverifiering - DNS-autentisering med SPF, DKIM och DMARC
  • IP-whitelist - Tillgängligt för planer med dedikerad IP
  • TLS-kryptering - Alla API-ändpunkter kräver HTTPS
  • Nyckelrotation - Rotera API-nycklar regelbundet via Mailgun-dashboarden

Relaterade resurser

Subscribe to updates

developer-docs

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

auto-detect
AI-assistent

Hej! Fråga mig om dokumentationen.