موصل Mailgun

اربط Mailgun بـ Brevo من خلال Tajo لتوحيد بيانات البريد الإلكتروني المعاملاتي والتسويقي، ومزامنة أحداث التسليم ومقاييس التفاعل، ودمج البنية التحتية للبريد الإلكتروني في عرض عميل واحد.

نظرة عامة

الخاصيةالقيمة
المنصةMailgun (من Sinch)
الفئةالتسويق عبر البريد الإلكتروني
تعقيد الإعدادسهل
تكامل رسميلا
البيانات المُزامَنةأحداث، جهات اتصال، قابلية التسليم، حملات
طريقة المصادقةمفتاح API (HTTP Basic Auth)

الميزات

  • مزامنة أحداث التسليم - تتبع الأحداث المُسلَّمة والمُرتدَّة والمفتوحة والمنقورة
  • مقاييس التفاعل - مزامنة معدلات الفتح والنقرات مع سمات جهات اتصال Brevo
  • إدارة الارتدادات - قمع العناوين المرتدة تلقائيًا في Brevo
  • معالجة الشكاوى - مزامنة شكاوى البريد العشوائي لنظافة القائمة
  • سمعة النطاق - مراقبة صحة نطاق الإرسال وقابلية التسليم
  • تتبع البريد المعاملاتي - ربط الإرسال المعاملاتي ببيانات التسويق

المتطلبات الأساسية

قبل البدء، تأكد من توفر ما يلي:

  1. حساب Mailgun مع نطاق إرسال مُوثَّق
  2. مفتاح Mailgun API من لوحة Mailgun
  3. حساب Brevo مع وصول إلى API
  4. حساب Tajo مع صلاحيات الموصلات

المصادقة

مصادقة مفتاح API

يستخدم Mailgun مصادقة HTTP Basic Authentication مع api كاسم مستخدم ومفتاح API الخاص بك ككلمة مرور:

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

أنواع مفاتيح API

يوفر Mailgun مفاتيح إرسال خاصة بالنطاق ومفاتيح API على مستوى الحساب. استخدم مفاتيح إرسال النطاق لعمليات الرسائل ومفتاح API للحساب لعمليات الإدارة.

الإعداد

الإعداد الأساسي

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_UNSUBSCRIBED

نقاط نهاية واجهة البرمجة

نقطة النهايةالطريقةالوصف
https://api.mailgun.net/v3/{domain}/messagesPOSTإرسال رسائل البريد الإلكتروني
https://api.mailgun.net/v3/{domain}/eventsGETاستعلام سجلات الأحداث
https://api.mailgun.net/v3/{domain}/bouncesGETسرد الارتدادات
https://api.mailgun.net/v3/{domain}/complaintsGETسرد الشكاوى
https://api.mailgun.net/v3/{domain}/unsubscribesGETسرد إلغاءات الاشتراك
https://api.mailgun.net/v3/{domain}/tagsGETسرد الوسوم
https://api.mailgun.net/v3/{domain}/tags/{tag}/statsGETالحصول على إحصائيات الوسم
https://api.mailgun.net/v3/listsGETسرد القوائم البريدية
https://api.mailgun.net/v3/domainsGETسرد النطاقات
https://api.mailgun.net/v4/address/validatePOSTالتحقق من عنوان البريد الإلكتروني

منطقة EU

لحسابات Mailgun في الاتحاد الأوروبي، استخدم https://api.eu.mailgun.net بدلاً من https://api.mailgun.net لجميع نقاط نهاية API.

أمثلة على الكود

تهيئة الموصل

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

// إرسال بريد إلكتروني باستخدام Mailgun 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.' }

مزامنة أحداث البريد الإلكتروني مع Brevo

// استعلام أحداث Mailgun ومزامنة بيانات التفاعل
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;
}
}
// اتّبع التقسيم للمزيد من الأحداث
if (paging.next) {
// جلب الصفحة التالية باستخدام عنوان paging.next
}

التعامل مع Mailgun Webhooks

const crypto = require('crypto');
app.post('/webhooks/mailgun', async (req, res) => {
// التحقق من توقيع webhook
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
});
// معالجة قمع الارتدادات
if (event === 'failed' && eventData.severity === 'permanent') {
await tajo.contacts.update(email, {
attributes: { MG_BOUNCE_TYPE: 'hard_bounce' },
emailBlacklisted: true
});
}
res.status(200).send('OK');
});

مزامنة الارتدادات والشكاوى

// مزامنة العناوين المرتدة لنظافة القائمة
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')
});
}

حدود المعدل

نقطة النهايةالحدملاحظات
Messages APIيختلف حسب الخطة100/ساعة (مجاني)، غير محدود (مدفوع)
Events APIلا يوجد حد صريحاستخدم التقسيم بـ 300 عنصر كحد أقصى
Validation APIبناءً على الخطةادفع مقابل كل عملية تحقق
Webhooksآنيةلا يوجد حد معدل على التسليم
Suppressions APIلا يوجد حد صريحتطبّق حدود المعدل القياسية

حدود الإرسال

يفرض Mailgun حدود إرسال بناءً على خطتك وسمعة نطاقك. تبدأ النطاقات الجديدة بحدود أقل تزداد مع تحسن سمعة المرسل. راقب إحصائيات نطاقك في لوحة Mailgun.

استكشاف الأخطاء وإصلاحها

المشكلةالسببالحل
401 Unauthorizedمفتاح API غير صالحتحقق من مفتاح API في لوحة Mailgun
النطاق غير مُوثَّقسجلات DNS مفقودةأضف سجلات TXT وCNAME وMX المطلوبة
Webhook لم يُستلمعنوان URL غير قابل للوصولتأكد من أن عنوان URL لـ webhook قابل للوصول علنيًا
الأحداث مفقودةنطاق الوقت ضيق جدًاوسّع معاملات begin/end
قابلية تسليم منخفضةسمعة النطاقتحقق من إحصائيات النطاق والمصادقة

وضع التصحيح

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

أفضل الممارسات

  1. وثّق نطاقات الإرسال - أكمل التحقق من DNS لقابلية تسليم مثلى
  2. استخدم webhooks للأحداث - تسليم webhook آني مقابل استطلاع Events API
  3. تعامل مع الارتدادات استباقيًا - اقمع الارتدادات الصعبة فورًا في Brevo
  4. ضع وسومًا على رسائلك - استخدم الوسوم لتصنيف وتحليل أداء البريد الإلكتروني
  5. راقب سمعة النطاق - تتبع مقاييس قابلية التسليم في لوحة Mailgun
  6. استخدم التحقق من البريد الإلكتروني - تحقق من العناوين قبل إضافتها إلى قوائم Brevo

الأمان

  • HTTP Basic Auth - مفتاح API يُنقل عبر ترويسة Authorization
  • توقيعات Webhook - التحقق من توقيع HMAC-SHA256
  • التحقق من النطاق - مصادقة DNS عبر SPF وDKIM وDMARC
  • قائمة IP المسموح بها - متاحة لخطط IP المخصصة
  • تشفير TLS - تتطلب جميع نقاط نهاية API بروتوكول HTTPS
  • تدوير المفاتيح - دوّر مفاتيح API دوريًا عبر لوحة Mailgun

موارد ذات صلة

Subscribe to updates

developer-docs

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

auto-detect
مساعد AI

مرحباً! اسألني أي شيء عن الوثائق.