Mailgun کنیکٹر
اپنے ٹرانزیکشنل اور مارکیٹنگ ای میل ڈیٹا کو متحد کرنے، ڈیلیوری ایونٹس اور engagement میٹرکس سنک کرنے، اور اپنے ای میل بنیادی ڈھانچے کو ایک واحد گاہک view میں یکجا کرنے کے لیے Tajo کے ذریعے Mailgun کو Brevo سے منسلک کریں۔
جائزہ
| خاصیت | قدر |
|---|---|
| پلیٹ فارم | Mailgun (by Sinch) |
| زمرہ | ای میل مارکیٹنگ |
| سیٹ اپ کی پیچیدگی | آسان |
| آفیشل انٹیگریشن | نہیں |
| سنک شدہ ڈیٹا | ایونٹس، رابطے، Deliverability، مہمات |
| تصدیق کا طریقہ | API Key (HTTP Basic Auth) |
خصوصیات
- ڈیلیوری ایونٹ سنک - delivered، bounced، opened، اور clicked ایونٹس ٹریک کریں
- Engagement میٹرکس - open اور click ریٹس کو Brevo رابطہ خصوصیات پر سنک کریں
- Bounce انتظام - Brevo میں bounce شدہ پتوں کو خودکار طور پر suppress کریں
- Complaint ہینڈلنگ - فہرست hygiene کے لیے spam complaints سنک کریں
- Domain reputation - بھیجنے والے domain کی صحت اور deliverability کی نگرانی کریں
- ٹرانزیکشنل ای میل ٹریکنگ - مارکیٹنگ ڈیٹا کے ساتھ ٹرانزیکشنل sends کا تعلق قائم کریں
شرائط
شروع کرنے سے پہلے، یقینی بنائیں کہ آپ کے پاس ہے:
- تصدیق شدہ بھیجنے والے domain کے ساتھ Mailgun اکاؤنٹ
- Mailgun Dashboard سے Mailgun API key
- API رسائی کے ساتھ Brevo اکاؤنٹ
- کنیکٹر اجازتوں کے ساتھ Tajo اکاؤنٹ
تصدیق
API Key تصدیق
Mailgun HTTP Basic Authentication کا استعمال کرتا ہے جس میں api کو username اور آپ کی API key کو password کے طور پر استعمال کیا جاتا ہے:
# Get your API key from https://app.mailgun.com/settings/api_securityexport MAILGUN_API_KEY=key-your-api-keyexport MAILGUN_DOMAIN=your-domain.comexport TAJO_API_KEY=your_tajo_api_keyexport BREVO_API_KEY=your_brevo_api_key// HTTP Basic Auth formatconst headers = { 'Authorization': `Basic ${Buffer.from( `api:${process.env.MAILGUN_API_KEY}` ).toString('base64')}`};
// Or using curl// curl -s --user 'api:YOUR_API_KEY' ...API Key اقسام
Mailgun domain مخصوص بھیجنے والی keys اور اکاؤنٹ سطح کی API keys فراہم کرتا ہے۔ پیغام آپریشنز کے لیے domain sending keys اور انتظامی آپریشنز کے لیے اکاؤنٹ API key استعمال کریں۔
تشکیل
بنیادی سیٹ اپ
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فیلڈ میپنگ
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_UNSUBSCRIBEDAPI اینڈ پوائنٹس
| اینڈ پوائنٹ | طریقہ | تفصیل |
|---|---|---|
https://api.mailgun.net/v3/{domain}/messages | POST | ای میل پیغامات بھیجیں |
https://api.mailgun.net/v3/{domain}/events | GET | ایونٹ لاگز کی کوئری |
https://api.mailgun.net/v3/{domain}/bounces | GET | bounces کی فہرست |
https://api.mailgun.net/v3/{domain}/complaints | GET | complaints کی فہرست |
https://api.mailgun.net/v3/{domain}/unsubscribes | GET | unsubscribes کی فہرست |
https://api.mailgun.net/v3/{domain}/tags | GET | ٹیگز کی فہرست |
https://api.mailgun.net/v3/{domain}/tags/{tag}/stats | GET | ٹیگ کے اعدادوشمار حاصل کریں |
https://api.mailgun.net/v3/lists | GET | mailing lists کی فہرست |
https://api.mailgun.net/v3/domains | GET | domains کی فہرست |
https://api.mailgun.net/v4/address/validate | POST | ای میل پتہ کی توثیق |
EU Region
EU پر مبنی Mailgun اکاؤنٹس کے لیے، تمام API اینڈ پوائنٹس کے لیے https://api.mailgun.net کے بجائے https://api.eu.mailgun.net استعمال کریں۔
کوڈ کی مثالیں
کنیکٹر کو انیشیلائز کریں
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'});Mailgun API کے ذریعے پیغام بھیجیں
// Send an email using Mailgun's Messages APIconst formData = new URLSearchParams();formData.append('from', `Your App <noreply@${domain}>`);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.' }ای میل ایونٹس کو Brevo میں سنک کریں
// Query Mailgun events and sync engagement dataconst 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 eventsif (paging.next) { // Fetch next page using paging.next URL}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');});Bounces اور Complaints سنک کریں
// Sync bounced addresses for list hygieneconst 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') });}شرح کی حدود
| اینڈ پوائنٹ | حد | نوٹس |
|---|---|---|
| Messages API | پلان کے مطابق مختلف | 100/گھنٹہ (free), لامحدود (paid) |
| Events API | کوئی واضح حد نہیں | 300 آئٹمز زیادہ سے زیادہ کے ساتھ pagination استعمال کریں |
| Validation API | پلان پر مبنی | Pay-per-validation |
| Webhooks | ریئل ٹائم | ڈیلیوری پر کوئی شرح کی حد نہیں |
| Suppressions API | کوئی واضح حد نہیں | معیاری شرح کی حد لاگو ہوتی ہے |
بھیجنے کی حدود
Mailgun آپ کے پلان اور domain reputation کی بنیاد پر بھیجنے کی حدود نافذ کرتا ہے۔ نئے domains کم حدود کے ساتھ شروع ہوتے ہیں جو آپ کے sender reputation میں بہتری کے ساتھ بڑھتی ہیں۔ Mailgun dashboard میں اپنے domain کے اعدادوشمار کی نگرانی کریں۔
ٹربل شوٹنگ
| مسئلہ | وجہ | حل |
|---|---|---|
| 401 Unauthorized | غلط API key | Mailgun dashboard میں API key کی تصدیق کریں |
| Domain تصدیق شدہ نہیں | DNS records غائب | مطلوبہ TXT, CNAME, MX records شامل کریں |
| Webhook موصول نہیں ہوا | URL قابل رسائی نہیں | یقینی بنائیں کہ webhook URL عوامی طور پر قابل رسائی ہے |
| ایونٹس غائب | وقت کی حد بہت تنگ | begin/end پیرامیٹرز کو پھیلائیں |
| کم deliverability | Domain reputation | domain stats اور تصدیق چیک کریں |
ڈیبگ موڈ
connectors: mailgun: debug: true log_level: verbose log_webhooks: true log_events: trueبہترین طرز عمل
- بھیجنے والے domains کی تصدیق کریں - بہترین deliverability کے لیے DNS verification مکمل کریں
- ایونٹس کے لیے webhooks استعمال کریں - Events API کو polling کرنے کے بجائے ریئل ٹائم webhook ڈیلیوری
- Bounces کو فعال طور پر سنبھالیں - hard bounces کو فوراً Brevo میں suppress کریں
- اپنے پیغامات کو ٹیگ کریں - ای میل کارکردگی کو زمرہ بندی اور تجزیہ کرنے کے لیے ٹیگز استعمال کریں
- Domain reputation کی نگرانی کریں - Mailgun dashboard میں deliverability میٹرکس ٹریک کریں
- ای میل توثیق استعمال کریں - Brevo فہرستوں میں شامل کرنے سے پہلے پتوں کی توثیق کریں
سیکیورٹی
- HTTP Basic Auth - API key Authorization ہیڈر کے ذریعے منتقل
- Webhook دستخط - HMAC-SHA256 دستخط کی توثیق
- Domain تصدیق - SPF, DKIM, اور DMARC DNS تصدیق
- IP وائٹ لسٹنگ - dedicated IP plans کے لیے دستیاب
- TLS انکرپشن - تمام API اینڈ پوائنٹس کو HTTPS درکار ہے
- Key روٹیشن - Mailgun dashboard کے ذریعے API keys کو وقتاً فوقتاً گردش دیں