Konektor Mailgun

Połącz Mailgun z Brevo przez Tajo, aby ujednolicić dane e-maili transakcyjnych i marketingowych, synchronizować zdarzenia dostarczania i metryki zaangażowania oraz konsolidować infrastrukturę e-mailową w jeden widok klienta.

Przegląd

WłaściwośćWartość
PlatformaMailgun (by Sinch)
KategoriaE-mail Marketing
Poziom konfiguracjiŁatwy
Integracja oficjalnaNie
Synchronizowane daneZdarzenia, Kontakty, Dostarczalność, Kampanie
Metoda uwierzytelnianiaKlucz API (HTTP Basic Auth)

Funkcje

  • Synchronizacja zdarzeń dostarczenia - Śledź zdarzenia dostarczone, odrzucone, otwarte i kliknięte
  • Metryki zaangażowania - Synchronizuj wskaźniki otwarć i kliknięć z atrybutami kontaktów Brevo
  • Zarządzanie odrzuceniami - Automatycznie wyciszaj odrzucone adresy w Brevo
  • Obsługa skarg - Synchronizuj skargi na spam dla higieny listy
  • Reputacja domeny - Monitoruj kondycję domeny wysyłającej i dostarczalność
  • Śledzenie e-maili transakcyjnych - Koreluj wysyłki transakcyjne z danymi marketingowymi

Wymagania wstępne

Zanim zaczniesz, upewnij się, że masz:

  1. Konto Mailgun ze zweryfikowaną domeną wysyłającą
  2. Klucz API Mailgun z Mailgun Dashboard
  3. Konto Brevo z dostępem do API
  4. Konto Tajo z uprawnieniami konektora

Uwierzytelnianie

Uwierzytelnianie kluczem API

Mailgun używa HTTP Basic Authentication z api jako nazwą użytkownika i kluczem API jako hasłem:

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

Typy kluczy API

Mailgun dostarcza klucze wysyłania specyficzne dla domeny i klucze API na poziomie konta. Używaj kluczy wysyłania domeny dla operacji wiadomości i klucza API konta dla operacji zarządzania.

Konfiguracja

Podstawowa konfiguracja

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

Mapowanie pól

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

Endpointy API

EndpointMetodaOpis
https://api.mailgun.net/v3/{domain}/messagesPOSTWyślij wiadomości e-mail
https://api.mailgun.net/v3/{domain}/eventsGETZapytaj logi zdarzeń
https://api.mailgun.net/v3/{domain}/bouncesGETLista odrzuceń
https://api.mailgun.net/v3/{domain}/complaintsGETLista skarg
https://api.mailgun.net/v3/{domain}/unsubscribesGETLista rezygnacji
https://api.mailgun.net/v3/{domain}/tagsGETLista tagów
https://api.mailgun.net/v3/{domain}/tags/{tag}/statsGETStatystyki tagów
https://api.mailgun.net/v3/listsGETLista list mailingowych
https://api.mailgun.net/v3/domainsGETLista domen
https://api.mailgun.net/v4/address/validatePOSTWalidacja adresu e-mail

Region UE

Dla kont Mailgun w UE używaj https://api.eu.mailgun.net zamiast https://api.mailgun.net dla wszystkich endpointów API.

Przykłady kodu

Inicjalizacja konektora

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

Wyślij wiadomość przez 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.' }

Synchronizuj zdarzenia e-mail z 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
}

Obsługa webhooków 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');
});

Synchronizuj odrzucenia i skargi

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

Limity API

EndpointLimitUwagi
Messages APIZależy od planu100/godz (free), nieograniczony (płatny)
Events APIBrak wyraźnego limituUżywaj paginacji z maks. 300 elementami
Validation APIZależy od planuPłatność za walidację
WebhookiCzas rzeczywistyBrak limitu dla dostarczania
Suppressions APIBrak wyraźnego limituStandardowe ograniczanie stosuje się

Limity wysyłania

Mailgun egzekwuje limity wysyłania oparte na Twoim planie i reputacji domeny. Nowe domeny zaczynają z niższymi limitami, które rosną w miarę poprawy reputacji nadawcy. Monitoruj statystyki domeny w dashboardzie Mailgun.

Rozwiązywanie problemów

ProblemPrzyczynaRozwiązanie
401 UnauthorizedNieprawidłowy klucz APIZweryfikuj klucz API w dashboardzie Mailgun
Domena niezweryfikowanaBrakujące rekordy DNSDodaj wymagane rekordy TXT, CNAME, MX
Webhook nie odebranyURL niedostępnyUpewnij się, że URL webhooka jest publicznie dostępny
Brakujące zdarzeniaZbyt wąski zakres czasuRozszerz parametry begin/end
Niska dostarczalnośćReputacja domenySprawdź statystyki domeny i uwierzytelnianie

Tryb debug

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

Najlepsze praktyki

  1. Weryfikuj domeny wysyłające - Ukończ weryfikację DNS dla optymalnej dostarczalności
  2. Używaj webhooków dla zdarzeń - Dostarczanie webhooków w czasie rzeczywistym vs. odpytywanie Events API
  3. Proaktywnie obsługuj odrzucenia - Natychmiast wyciszaj twarde odrzucenia w Brevo
  4. Taguj swoje wiadomości - Używaj tagów do kategoryzacji i analizowania wydajności e-maili
  5. Monitoruj reputację domeny - Śledź metryki dostarczalności w dashboardzie Mailgun
  6. Używaj walidacji e-maili - Waliduj adresy przed dodaniem do list Brevo

Bezpieczeństwo

  • HTTP Basic Auth - Klucz API przekazywany przez nagłówek Authorization
  • Podpisy webhooków - Weryfikacja podpisu HMAC-SHA256
  • Weryfikacja domeny - Uwierzytelnianie DNS SPF, DKIM i DMARC
  • Allowlisting IP - Dostępne dla planów z dedykowanym IP
  • Szyfrowanie TLS - Wszystkie endpointy API wymagają HTTPS
  • Rotacja kluczy - Regularnie rotuj klucze API przez dashboard Mailgun

Powiązane zasoby

Subscribe to updates

developer-docs

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

auto-detect
Asystent AI

Cześć! Zapytaj mnie o dokumentację.