انتقل إلى المحتوى الرئيسي
MailLand

دليل الانتقال

الانتقال من Mailgun إلى Mail.Land

إذا كنت ترسل عبر SMTP، فالتغيير مضيف وكلمة مرور. وإذا كنت تستخدم واجهة الرسائل، فهذا الدليل يطابق كل حقل شائع في Mailgun مع Mail.Land ويعدّد ما يحتاج إلى تغيير في الشيفرة.

SMTP
# Before (Mailgun)
SMTP_HOST=smtp.mailgun.org
SMTP_PORT=587          # STARTTLS
SMTP_USER=<SMTP login of your sending domain>
SMTP_PASS=<SMTP password of that login>

# After (Mail.Land)
SMTP_HOST=smtp.mail.land
SMTP_PORT=587          # STARTTLS
SMTP_USER=apikey       # any value; Mail.Land ignores it
SMTP_PASS=ml_pet_...   # a Mail.Land key with SMTP enabled

مفاهيم Mailgun في Mail.Land

مفاهيم Mailgun في Mail.Land
MailgunMail.Land
نطاق الإرسالنطاق موثّق (SPF وDKIM وDMARC ومسار الإرجاع)
مفتاح API ومفاتيح إرسال النطاقمفاتيح API (بيانات اعتماد)، كل منها مقيّد بالواجهة البرمجية أو SMTP، وبنطاقات وعناوين IP
بيانات اعتماد SMTP لكل نطاقمفتاح API نفسه، مستخدماً ككلمة مرور SMTP
القوالب (Handlebars)قوالب بعناصر نائبة {{name}}
قوائم الارتدادات والشكاوى وإلغاءات الاشتراكقوائم منع إرسال بنوع ونطاق تطبيق
WebhooksWebhooks موقّعة بـ HMAC-SHA256، بسرّ منفصل لكل Webhook
المسارات (Routes)المسارات الواردة

أنشئ مفاتيح API المناسبة

تخبرك بادئة مفتاح Mail.Land بوضعه وتدفقه. أنشئ مفتاحاً لكل تطبيق ولكل تدفق، وأبقِ مفاتيح الإنتاج بعيداً عن أنظمة الاختبار.

أنشئ مفاتيح API المناسبة
البادئةالغرض منه
ml_pet_إنتاج، معاملاتي: الإيصالات وإعادة تعيين كلمات المرور والتنبيهات. حتى 5 مستلمين في كل طلب.
ml_pem_إنتاج، تسويقي: النشرات الإخبارية والإرسال الجماعي عبر send-batch، حتى 10,000 مستلم في كل استدعاء.
ml_set_اختبار، معاملاتي: مع sandboxBehavior بالقيمة LogOnly (الافتراضية) تُقبل الطلبات وتُسجَّل ولا تُسلَّم أبداً. استخدمه لاختبارات التكامل.

يمكن تقييد كل مفتاح بالواجهة البرمجية أو SMTP أو كليهما، وبنطاقات محددة وعناوين IP معروفة. يُعرض المفتاح مرة واحدة، ولا تحفظ Mail.Land إلا قيمة مجزّأة (hash) منه.

وثائق مفاتيح API

تبديل SMTP: غيّر المضيف وكلمة المرور

تستخدم Mailgun اسم دخول SMTP لكل نطاق إرسال. أما Mail.Land فتستخدم مفتاح API ككلمة مرور وتتجاهل اسم المستخدم.

تبديل SMTP: غيّر المضيف وكلمة المرور
الإعدادMailgunMail.Land
المضيفsmtp.mailgun.orgsmtp.mail.land
المنفذ25 أو 587 أو 2525 مع STARTTLS، أو 465 مع TLS587 مع STARTTLS
اسم المستخدماسم دخول SMTP لنطاق الإرسالأي قيمة، مثل apikey
كلمة المروركلمة مرور اسم الدخول ذاكمفتاح API من Mail.Land مفعّل لـ SMTP (ml_pet_ للبريد المعاملاتي)

لا تقبل Mail.Land تسجيل الدخول إلا بعد STARTTLS، ولا يُتاح المنفذ 465. إذا كان تطبيقك يستخدم 465، فحوّله إلى 587 مع STARTTLS. يمكن أن يصل حجم الرسالة إلى 15 MiB.

وثائق مرحّل SMTP

تبديل استدعاء API

تستقبل Mailgun حقول نموذج مع مصادقة HTTP Basic، وتستقبل Mail.Land متن JSON مع الترويسة X-API-Key. إليك الرسالة نفسها في الواجهتين، وإرسالاً دفعياً.

curl -s --user "api:$MAILGUN_API_KEY" \
  https://api.mailgun.net/v3/yourdomain.com/messages \
  -F from="Your Shop <[email protected]>" \
  -F to="Jane <[email protected]>" \
  -F subject="Order 12345 has shipped" \
  -F text="Your order is on its way." \
  -F html="<p>Your order is on its way.</p>" \
  -F h:Reply-To="[email protected]" \
  -F o:tag="order-shipped"
curl -X POST https://api.mail.land/v1/transactional/send \
  -H "X-API-Key: $MAILLAND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": { "email": "[email protected]", "name": "Your Shop" },
    "to": [{
      "email": "[email protected]", "name": "Jane",
      "variables": { "orderNumber": "12345" }
    }],
    "replyTo": "[email protected]",
    "subject": "Order {{orderNumber}} has shipped",
    "textContent": "Your order {{orderNumber}} is on its way.",
    "htmlContent": "<p>Your order {{orderNumber}} is on its way.</p>",
    "tags": ["order-shipped"]
  }'
# MAILLAND_API_KEY=ml_pet_...  (production, transactional)

مطابقة حقول استدعاء الإرسال

من POST /v3/<domain>/messages إلى POST /v1/transactional/send.

مطابقة حقول استدعاء الإرسال
MailgunMail.Landملاحظة
--user api:<key> (مصادقة Basic)X-API-Key: <key>ترويسة بدلاً من مصادقة Basic، ومتن JSON بدلاً من حقول النموذج.
fromfrom.email, from.nameافصل اسم العرض عن العنوان. يجب أن يكون العنوان على نطاق موثّق.
toto[].email, to[].nameحتى 5 مستلمين في كل طلب مع مفتاح معاملاتي؛ ويتلقى كل منهم نسخة منفصلة.
cc, bccلا يوجدغير مدعوم. أرسل رسالة منفصلة إلى كل مستلم.
subjectsubjectمطلوب ما لم تستخدم قالباً.
texttextContent
htmlhtmlContent
amp-htmlلا يوجدلا يوجد جزء AMP.
template, t:versiontemplateIdأعد إنشاء القالب في Mail.Land أولاً. لا توجد إصدارات للقوالب.
t:variablesvariablesقيم مشتركة بين كل المستلمين، ككائن JSON بدلاً من سلسلة JSON.
v:<name> (metadata)tagsلا توجد في Mail.Land بيانات وصفية بصيغة مفتاح وقيمة على الأحداث. انقل المعرّف في tags أو في ترويسة مخصصة.
recipient-variablesto[].variablesقيم خاصة بكل مستلم. لأكثر من 5 مستلمين استخدم send-batch مع مفتاح تسويقي وrecipients[].variables.
o:tagtagsمصفوفة من السلاسل النصية.
h:<Header-Name>customHeadersكائن من أسماء الترويسات وقيمها.
h:Reply-ToreplyToسلسلة عنوان بسيطة.
attachment, inlineattachments[].fileName, contentType, content, contentId, inlineمحتوى Base64 داخل JSON بدلاً من ملفات multipart. حتى 10 مرفقات و10 MiB إجمالاً.
o:deliverytimescheduledAtتاريخ ووقت UTC بصيغة ISO 8601، حتى 7 أيام مقدماً.
o:tracking-opens, o:tracking-clickstracking.opens, tracking.clicksقيم منطقية. يُقدَّم اختيار النطاق نفسه لتتبع الفتح.
لا مقابل لهالترويسة X-Idempotency-Keyخلال فترة الاحتفاظ، تعيد المحاولة بالمفتاح نفسه الاستجابة الأصلية بدلاً من الإرسال مجدداً.

تردّ Mail.Land بـ 202 Accepted مع jobId ومعرّف رسالة لكل مستلم مقبول وقائمتي المستلمين المقبولين والمرفوضين.

وثائق REST API

أضف نطاقك وسجلات DNS

أضف النطاق في Mail.Land وانشر السجلات التي تعرضها لوحة التحكم. يجب التحقق من SPF وDKIM وDMARC قبل أن تتمكن من الإرسال. يمكنك فعل ذلك بينما لا تزال Mailgun ترسل.

أضف نطاقك وسجلات DNS
السجلالاسمالقيمةملاحظة
SPF (TXT)yourdomain.cominclude:spf.mlnd.netأضف include إلى سجل SPF الحالي. يجب أن يكون للنطاق سجل SPF واحد فقط.
DKIM (TXT)mlnd._domainkey.yourdomain.comv=DKIM1; k=rsa; p=...المحدِّد (selector) هو mlnd، فيوجد السجل إلى جانب سجل DKIM الخاص بـ Mailgun.
DMARC (TXT)_dmarc.yourdomain.comv=DMARC1; p=...مطلوب. احتفظ بسجل DMARC واحد؛ ويكفي سجل قائم يتضمن سياسة.
مسار الإرجاع (CNAME)bounce.yourdomain.combounce.mlnd.netاضبطه على DNS only دون وكيل (proxy). تأكد من أن هذا الاسم غير مستخدم أصلاً.

احتفظ بسجلات DNS الخاصة بـ Mailgun حتى ينتهي الانتقال، واحذفها فقط بعد خروج آخر رسالة منها.

وثائق إعداد DNS

استورد قوائم منع الإرسال أولاً

تحتفظ Mailgun بالارتدادات والشكاوى وإلغاءات الاشتراك لكل نطاق إرسال، فصدّر قوائم كل نطاق ترسل منه، مثلاً عبر GET /v3/<domain>/bounces. ثم استورد كل قائمة إلى Mail.Land بالنوع ونطاق التطبيق المطابقين، من لوحة التحكم أو عبر POST /v1/transactional/suppressions/import.

استورد قوائم منع الإرسال أولاً
قائمة Mailgunالنوع في Mail.Landنطاق التطبيق
الارتدادات (Bounces)HardBounceGlobal
الشكاوى (Complaints)ComplaintGlobal
إلغاءات الاشتراك (كل البريد)UnsubscribeGlobal
إلغاءات الاشتراك لوسم واحد أو قائمة بريدية واحدةUnsubscribeMarketing؛ أو List، الذي ينطبق فقط على الحملات المرسلة إلى القائمة البريدية المطابقة في Mail.Land

استورد قبل أول إرسال عبر Mail.Land، كي يبقى من ألغوا اشتراكهم ممنوعين من البداية. تُتخطى العناوين الموجودة مسبقاً ولا تتكرر.

وثائق قوائم منع الإرسال

وجّه Webhooks إلى Mail.Land

أضف نقطة النهاية في Mail.Land واختر الأحداث وتحقق من الترويسة X-MLND-Signature. توقّع Mailgun طابعاً زمنياً ورمزاً بمفتاح واحد للحساب كله؛ أما Mail.Land فتوقّع الطابع الزمني والمتن الخام بسرّ لكل Webhook، لذا حدّث شيفرة التحقق أيضاً.

وجّه Webhooks إلى Mail.Land
حدث Mailgunحدث Mail.Landملاحظة
acceptedلا يوجد حالياًmessage.sent غير متاح بعد؛ تؤكد الاستجابة 202 القبول.
deliveredmessage.delivered
temporary_failmessage.deferred
permanent_failmessage.bouncedرفض من خادم الاستقبال. أما message.failed فيبلّغ عن توقف من جهة Mail.Land.
complainedmessage.complained
unsubscribedmessage.unsubscribedيُرسل عند إلغاء المستلم اشتراكه بنفسه، لا عند تغييرات تجريها عبر الواجهة البرمجية.
opened, clickedغير متاح بعدأحداث الفتح والنقر مدرجة في الكتالوج لكنها لا تُرسل اليوم.

أزل التكرار بالاعتماد على event_id، لأن التسليم المعاد يحمل معرّف الحدث نفسه. قد تُصحَّح الحالة لاحقاً، فواصل معالجة الأحداث بعد الحدث النهائي وقارن status_version.

أحداث Webhook

التحقق من توقيع Webhook

أعد إنشاء قوالبك

أنشئ كل قالب في لوحة تحكم Mail.Land أو عبر واجهة القوالب، ثم أرسله باستخدام templateId وvariables. يجب أن يكون لكل عنصر نائب قيمة، وإلا رُفض الإرسال برمز 422 مع أسماء القيم الناقصة.

أعد إنشاء قوالبك
MailgunMail.Land
{{firstName}}{{firstName}}
%recipient.firstName%{{firstName}}
{{#if}}, {{#unless}}, {{#each}}, {{#with}}, {{#equal}}لا يوجد
إصدارات القوالب (t:version)لا يوجد

العناصر النائبة في Mail.Land بسيطة: دون شروط أو حلقات أو مرشحات أو أجزاء. انقل هذا المنطق إلى تطبيقك، أو احتفظ بقالب لكل حالة.

وثائق القوالب

التبديل خطوة بخطوة

  1. أضف نطاق الإرسال في Mail.Land وتحقق منه، مع إضافة include:spf.mlnd.net إلى سجل SPF الحالي.
  2. صدّر قوائم منع الإرسال لكل نطاق في Mailgun واستوردها.
  3. أعد إنشاء القوالب وWebhooks.
  4. أنشئ مفتاح اختبار مع sandboxBehavior بالقيمة LogOnly، وشغّل اختبارات التكامل على Mail.Land دون تسليم بريد.
  5. أرسل رسائل حقيقية إلى عناوين تتحكم بها وتحقق منها في سجل البريد.
  6. انقل تطبيقاً واحداً أو حصة صغيرة من حركة الإرسال، ثم راقب التسليم والارتدادات والشكاوى.
  7. ما دام المزودان يعملان، أبقِ إلغاءات الاشتراك متزامنة في الاتجاهين: انسخ إلغاءات الاشتراك والشكاوى والارتدادات الجديدة من Mailgun إلى Mail.Land ومن Mail.Land إلى Mailgun، وأجرِ مزامنة أخيرة قبل نقل ما تبقى من الحركة.
  8. تحقق من الإحماء لنطاقك: في Free وPro يكون للنطاق الجديد حد يومي يرتفع على مراحل، وتُرفض الرسائل التي تتجاوزه. خطط للانتقال ضمن هذه الحدود، أو اسألنا عن جدول مخصص. خطة Max لا تمر بالإحماء.
  9. ثم انقل الباقي، وأبقِ Mailgun فعّالة حتى تخرج آخر رسائلها المجدولة والمعاد إرسالها.

Mail.Land مقابل Mailgun: المقارنة الموثّقة

المصادر

صفحات Mailgun العامة المستخدمة في هذا الدليل.

  1. [1]Mailgun API: إرسال رسالةhttps://documentation.mailgun.com/docs/mailgun/api-reference/send/mailgun/messages/post-v3--domain-name--messagesتم التحقق في 4 نوفمبر 2026
  2. [2]Mailgun API: المصادقةhttps://documentation.mailgun.com/docs/mailgun/api-reference/authenticationتم التحقق في 4 نوفمبر 2026
  3. [3]Mailgun: الإرسال عبر SMTPhttps://documentation.mailgun.com/docs/mailgun/user-manual/sending-messages/send-smtpتم التحقق في 4 نوفمبر 2026
  4. [4]Mailgun: الإرسال بالقوالبhttps://documentation.mailgun.com/docs/mailgun/user-manual/sending-messages/send-templatesتم التحقق في 4 نوفمبر 2026
  5. [5]Mailgun: Webhookshttps://documentation.mailgun.com/docs/mailgun/user-manual/webhooks/webhooksتم التحقق في 4 نوفمبر 2026
  6. [6]Mailgun: تأمين Webhookshttps://documentation.mailgun.com/docs/mailgun/user-manual/webhooks/securing-webhooksتم التحقق في 4 نوفمبر 2026
  7. [7]Mailgun API: الارتداداتhttps://documentation.mailgun.com/docs/mailgun/api-reference/send/mailgun/bounces/get-v3--domainid--bouncesتم التحقق في 4 نوفمبر 2026

الأسئلة الشائعة

هل يمكنني مواصلة الإرسال عبر Mailgun أثناء الاختبار؟

نعم. التحقق من نطاق في Mail.Land لا يمنع Mailgun من الإرسال باسمه، فيمكنك تشغيل الاثنين ونقل الحركة تدريجياً.

تتيح لي Mailgun اختيار منطقة في الولايات المتحدة أو الاتحاد الأوروبي. أين تعمل Mail.Land؟

لا توجد في Mail.Land مناطق للاختيار. النسخة الأساسية من بياناتك في ألمانيا؛ والمزودون خارج الاتحاد الأوروبي مدرجون في صفحة GDPR لدينا.

كيف أرسل إلى مستلمين كثيرين دفعة واحدة؟

استخدم POST /v1/transactional/send-batch مع مفتاح تسويقي (ml_pem_). يقبل حتى 10,000 مستلم، لكل منهم متغيراته. أما المفتاح المعاملاتي فيقبل حتى 5 مستلمين في كل طلب.

هل توجد SDK رسمية لـ Mail.Land؟

ليس بعد. تتضمن الوثائق أمثلة جاهزة للنسخ لـ REST API بلغات cURL وNode.js وPython وPHP وC# وJava وGo، وتعمل أي مكتبة SMTP مع المرحّل.

هل أنت مستعد للانتقال من Mailgun؟

أنشئ حساباً مجانياً وأرسل أول رسالة اختبار اليوم. وإن أردت المساعدة، فأخبرنا عن إعدادك.