MailLandDocs
قابلية التسليم

قوائم الحظر

إدارة قوائم الحظر لمنع الإرسال إلى العناوين غير الصالحة أو الملغاة اشتراكها أو التي قدّمت شكاوى

تمنع قائمة الحظر إرسال رسائل البريد الإلكتروني إلى العناوين التي ارتدّت أو ألغت اشتراكها أو قدّمت شكاوى. تُدير MailLand الحظر تلقائيًا من أحداث الارتداد والشكاوى، ويمكنكم إضافة الإدخالات أو إزالتها يدويًا عبر API.

أنواع الحظر

النوعالقيمةالوصفالنطاق الافتراضي
HardBounce1فشل تسليم دائمGlobal (دائمًا)
SoftBounce2فشل مؤقت (حظر تسويقي لمدة 30 يومًا، ولا يتصاعد إلا بعد 3 ارتدادات مؤهلة على الأقل خلال 7 أيام على الأقل)Marketing (انتهاء صلاحية 30 يومًا)
Complaint3أبلغ المستلم عن البريد كرسالة مزعجةGlobal (دائمًا)
Unsubscribe4ألغى المستلم اشتراكهيعتمد على نوع الرسالة
Manual5مُضاف يدويًا عبر API أو لوحة التحكمأي نطاق
Invalid6تنسيق بريد إلكتروني غير صالحGlobal (دائمًا)
SpamTrap7عنوان تله بريد مزعج معروفGlobal (دائمًا)
RoleAddress8بريد إلكتروني مرتبط بدور (info@، admin@، إلخ)Global (دائمًا)

نطاقات الحظر

تتحكم النطاقات في أنواع رسائل البريد الإلكتروني المحظورة:

النطاقالقيمةالسلوك
Global0يحظر جميع رسائل البريد الإلكتروني (التعاملاتية والتسويقية)
Marketing1يحظر رسائل التسويق؛ لا تزال رسائل المعاملات تُسلَّم
Transactional2يحظر رسائل المعاملات فقط (نادر)
List3يحظر رسائل قائمة بريدية محددة فقط

قيود النطاق:

  • HardBounce، Complaint، Invalid، SpamTrap، RoleAddress ← نطاق Global فقط
  • SoftBounce ← عادةً نطاق Marketing
  • Unsubscribe ← Global أو Marketing أو List (ليس Transactional)
  • Manual ← أي نطاق

قائمة إدخالات الحظر

GET https://api.mail.land/v1/transactional/suppressions

المصادقة عبر Authorization: Bearer <token> أو X-API-Key: <api key>.

List suppressions
curl https://api.mail.land/v1/transactional/suppressions \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

معاملات الاستعلام

المعاملالنوعالافتراضيالوصف
cursorstring-مؤشر معتم من nextCursor للصفحة السابقة. احذفه للصفحة الأولى.
limitint50العناصر في الصفحة (بحد أقصى 100)
searchstring-تصفية حسب عنوان البريد الإلكتروني
typeSuppressionType-تصفية حسب النوع
scopeSuppressionScope-تصفية حسب النطاق
mailingListIdstring-المعرّف العام للقائمة البريدية، يُحلَّل داخل مستأجرك. المعرّف غير المعروف أو التابع لمستأجر آخر أو الرقمي يُعيد 404.
fromDatedatetimeقبل 90 يومًاتاريخ البداية
toDatedatetimeالآنتاريخ النهاية
sortBystringCreatedAtحقل الترتيب
sortDescendingbooltrueاتجاه الترتيب
Suppression list response
{
  "items": [
    {
      "id": "k3v9x2m8q1w7z4",
      "email": "[email protected]",
      "suppressionType": "hardBounce",
      "scope": "global",
      "mailingListId": null,
      "mailingListName": null,
      "expiresAt": null,
      "reason": "550 5.1.1 The email account does not exist",
      "bounceType": "Hard",
      "bounceCategory": "invalid_recipient",
      "bounceCount": 1,
      "lastBounceAt": "2026-02-17T12:00:00Z",
      "unsubscribeSource": null,
      "campaignId": null,
      "subscriberId": null,
      "source": "webhook",
      "notes": null,
      "createdAt": "2026-02-17T12:00:01Z",
      "isLocked": false,
      "lockedReason": null
    }
  ],
  "nextCursor": "eyJ2IjoxLCJzIjoiY3JlYXRlZGF0OmRlc2MiLCJrIjoi...",
  "hasMore": true
}

الحقول mailingListId وcampaignId وsubscriberId هي المعرّف العام للمورد المرتبط، محلولًا داخل مستأجرك، أبدًا المعرّف الرقمي الداخلي. تكون كل واحدة منها null عندما لا يوجد رابط من هذا النوع، أو عندما يكون المورد المرتبط قد حُذف منذ ذلك الحين.

إحصاءات الحظر

احصلوا على ملخص لقائمة الحظر الخاصة بكم:

GET https://api.mail.land/v1/transactional/suppressions/stats
Get suppression stats
curl https://api.mail.land/v1/transactional/suppressions/stats \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Stats response
{
  "totalCount": 5000,
  "globalCount": 3000,
  "marketingCount": 1500,
  "transactionalCount": 200,
  "listCount": 300,
  "hardBounceCount": 2000,
  "softBounceCount": 1500,
  "complaintCount": 500,
  "unsubscribeCount": 700,
  "manualCount": 200,
  "invalidCount": 50,
  "spamTrapCount": 30,
  "roleAddressCount": 20,
  "expiringCount": 85,
  "lastSuppression": "2026-02-17T12:00:01Z"
}

يُظهر expiringCount الارتدادات الناعمة التي ستنتهي صلاحيتها خلال الأيام السبعة القادمة.

التحقق من حظر بريد إلكتروني

فحص مفرد

GET https://api.mail.land/v1/transactional/suppressions/[email protected]&messageType=Marketing
Check suppression
curl "https://api.mail.land/v1/transactional/suppressions/[email protected]&messageType=Marketing" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
المعاملالنوعالافتراضيالوصف
emailstring-عنوان البريد الإلكتروني (مطلوب)
messageTypestringMarketingMarketing أو Transactional
mailingListIdstring-المعرّف العام للقائمة البريدية، يُحلَّل داخل مستأجرك. المعرّف غير المعروف أو التابع لمستأجر آخر أو الرقمي يُعيد 404.
Check response
{
  "email": "[email protected]",
  "isSuppressed": true,
  "messageType": "Marketing"
}

فحص جماعي

فحص ما يصل إلى 1٬000 بريد إلكتروني دفعةً واحدة:

POST https://api.mail.land/v1/transactional/suppressions/check-bulk
Bulk check suppressions
curl -X POST https://api.mail.land/v1/transactional/suppressions/check-bulk \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{"emails":["[email protected]","[email protected]","[email protected]"],"messageType":"Marketing","mailingListId":null}'
Bulk check request
{
  "emails": ["[email protected]", "[email protected]", "[email protected]"],
  "messageType": "Marketing",
  "mailingListId": null
}
Bulk check response
{
  "suppressedEmails": ["[email protected]"]
}

إضافة حظر

POST https://api.mail.land/v1/transactional/suppressions
Add suppression
curl -X POST https://api.mail.land/v1/transactional/suppressions \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{"email":"[email protected]","suppressionType":"Manual","scope":"Global","reason":"Customer requested removal from all lists","notes":"Ticket #4521"}'
Add suppression request
{
  "email": "[email protected]",
  "suppressionType": "Manual",
  "scope": "Global",
  "reason": "Customer requested removal from all lists",
  "notes": "Ticket #4521"
}
الحقلالنوعمطلوبالافتراضيالوصف
emailstringنعم-عنوان البريد الإلكتروني (بحد أقصى 255 حرفًا)
suppressionTypestringلاManualنوع الحظر
scopestringلاGlobalنطاق الحظر
mailingListIdstringلا-المعرّف العام للقائمة البريدية، يُحلَّل داخل مستأجرك. مطلوب إذا كان النطاق List؛ المعرّف غير المعروف أو التابع لمستأجر آخر أو الرقمي يُعيد 404.
reasonstringلا-السبب (بحد أقصى 500 حرف)
notesstringلا-ملاحظات داخلية

يُعيد 201 Created مع كائن الحظر الكامل. رأس Location هو /v1/transactional/suppressions: مسار القائمة نفسه، إذ لا يوجد مسار للجلب حسب المعرّف. استخدم حقل id في نص الاستجابة لتحديد الحظر المُنشأ، ونقطتَي قائمة إدخالات الحظر أو التحقق من حظر بريد إلكتروني أدناه للبحث عنه.

الإضافة الجماعية

إضافة ما يصل إلى 1٬000 حظر دفعةً واحدة:

POST https://api.mail.land/v1/transactional/suppressions/bulk
Bulk add suppressions
curl -X POST https://api.mail.land/v1/transactional/suppressions/bulk \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{"emails":[{"email":"[email protected]","suppressionType":"Manual","scope":"Global","reason":"Cleanup"},{"email":"[email protected]","suppressionType":"Manual","scope":"Marketing"}]}'
Bulk add request
{
  "emails": [
    { "email": "[email protected]", "suppressionType": "Manual", "scope": "Global", "reason": "Cleanup" },
    { "email": "[email protected]", "suppressionType": "Manual", "scope": "Marketing" }
  ]
}
Bulk add response
{
  "totalCount": 2,
  "addedCount": 2,
  "skippedCount": 0,
  "skippedEmails": [],
  "message": "Added 2 suppressions"
}

تُتجاوز رسائل البريد الإلكتروني الموجودة بالفعل في قائمة الحظر (لا تتكرر).

الاستيراد من CSV

من محتوى نصي

POST https://api.mail.land/v1/transactional/suppressions/import
Import suppressions from CSV text
curl -X POST https://api.mail.land/v1/transactional/suppressions/import \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{"csvContent":"[email protected]\[email protected]\[email protected]","defaultReason":"Imported from legacy system","suppressionType":"Manual","scope":"Global"}'
CSV import request
{
  "csvContent": "[email protected]\n[email protected]\n[email protected]",
  "defaultReason": "Imported from legacy system",
  "suppressionType": "Manual",
  "scope": "Global"
}

من رفع ملف

POST https://api.mail.land/v1/transactional/suppressions/import-file
Import suppressions from file
curl -X POST "https://api.mail.land/v1/transactional/suppressions/import-file?scope=List&mailingListId=123" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -F "[email protected]"

scope وmailingListId معاملا استعلام، وليسا حقلي نموذج: أي حقل نموذج بأحد هذين الاسمين يُتجاهل بصمت، لذا يفشل استيراد بنطاق List مُرسَل كحقل نموذج بخطأ 400. mailingListId هو المعرّف العام للقائمة، يُحلَّل داخل مستأجرك؛ المعرّف غير المعروف أو التابع لمستأجر آخر أو الرقمي يُعيد 404.

قم برفع ملف .csv (بحد أقصى 5 ميغابايت) يحتوي على عناوين بريد إلكتروني مفصولة بفواصل أو أسطر جديدة. يُتخطى سطر العنوان الذي يحتوي على "email" تلقائيًا.

معاملات الاستعلام:

المعاملالنوعالوصف
filefile (حقل نموذج متعدد الأجزاء)ملف CSV (بحد أقصى 5 ميغابايت، امتداد .csv مطلوب)
scopestring (استعلام)نطاق الحظر (الافتراضي: Global)
mailingListIdstring (استعلام)المعرّف العام للقائمة البريدية، يُحلَّل داخل مستأجرك. مطلوب إذا كان النطاق List؛ المعرّف غير المعروف أو التابع لمستأجر آخر أو الرقمي يُعيد 404.
Import result
{
  "totalRows": 1000,
  "importedCount": 950,
  "skippedCount": 40,
  "invalidCount": 10,
  "invalidEmails": ["not-an-email", "missing-domain@", "..."],
  "errors": [],
  "message": "Imported 950 emails. 40 already existed. 10 invalid."
}

تُظهر قائمة invalidEmails ما يصل إلى 10 إدخالات غير صالحة. تُحسب رسائل البريد الإلكتروني الموجودة مسبقًا ضمن skippedCount وليس ضمن الأخطاء.

تصدير قائمة الحظر

نزّلوا قائمة الحظر الخاصة بكم بصيغة CSV:

GET https://api.mail.land/v1/transactional/suppressions/export
Export suppressions
curl https://api.mail.land/v1/transactional/suppressions/export \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -o suppressions.csv
المعاملالنوعالوصف
typeSuppressionTypeتصفية حسب النوع
scopeSuppressionScopeتصفية حسب النطاق
mailingListIdstringالمعرّف العام للقائمة البريدية، يُحلَّل داخل مستأجرك. المعرّف غير المعروف أو التابع لمستأجر آخر أو الرقمي يُعيد 404.

يُعيد ملف CSV بالأعمدة التالية: email، type، scope، mailing_list، reason، bounce_count، source، created_at، expires_at. محدود بـ 100٬000 سطر.

حذف حظر

حسب المعرّف

DELETE https://api.mail.land/v1/transactional/suppressions/{id}
Delete suppression by ID
curl -X DELETE https://api.mail.land/v1/transactional/suppressions/k3v9x2m8q1w7z4 \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

حسب البريد الإلكتروني

DELETE https://api.mail.land/v1/transactional/suppressions/[email protected]
Delete suppression by email
curl -X DELETE "https://api.mail.land/v1/transactional/suppressions/[email protected]" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
المعاملالنوعالوصف
emailstringالبريد الإلكتروني لإلغاء الحظر (مطلوب)
scopeSuppressionScopeإزالة هذا النطاق فقط
mailingListIdstringإزالة لهذه القائمة البريدية فقط، معرّفها العام، يُحلَّل داخل مستأجرك. المعرّف غير المعروف أو التابع لمستأجر آخر أو الرقمي يُعيد 404.

يُعيد 204 No Content عند النجاح، و404 إذا لم يُوجد.

الحظر المقفل

لا يمكن حذف بعض إدخالات الحظر لحماية سمعة المُرسِل والامتثال للوائح مكافحة البريد المزعج:

النوع المقفلالسبب
Complaintشكوى بريد مزعج: متطلب امتثال
SpamTrapتله بريد مزعج معروف: حماية قابلية التسليم
إلغاء اشتراك عبر FeedbackLoopحلقة ملاحظات ISP
إلغاء اشتراك عبر OneClickإلغاء اشتراك بنقرة واحدة RFC 8058
إلغاء اشتراك عبر ManualLinkأكّد المستخدم إلغاء الاشتراك
إلغاء اشتراك عبر Preferenceاختيار مركز التفضيلات

تُعيد محاولة حذف حظر مقفل الاستجابة التالية:

403 Forbidden
{
  "code": "SUPPRESSION_LOCKED",
  "message": "Cannot delete: Spam complaint - compliance requirement",
  "details": {
    "lockedReason": "Spam complaint - compliance requirement"
  }
}

سيُلحق حذف إدخالات الحظر المستندة إلى الشكاوى وإعادة الإرسال إلى تلك العناوين ضررًا بسمعتكم كمُرسِل وقد ينتهك قوانين مكافحة البريد المزعج. هذه الإدخالات مقفلة لحمايتكم.

مصادر إلغاء الاشتراك

عند إلغاء المستلم لاشتراكه، يُسجَّل المصدر:

المصدرالقيمةالوصفمقفل
ListUnsubscribeHeader0ترويسة List-Unsubscribe من RFC 8058لا
ListUnsubscribeMail1إلغاء اشتراك عبر mailto:لا
WebForm2صفحة إلغاء اشتراك ويبلا
Api3استدعاء APIلا
Admin4لوحة الإدارةلا
FeedbackLoop5حلقة ملاحظات ISPنعم
OneClick6POST بنقرة واحدة RFC 8058نعم
ManualLink7المستخدم أكّد عبر رابطنعم
Preference8اختيار مركز التفضيلاتنعم

استجابات الخطأ

الحالةالرمزالوصف
400INVALID_REQUESTفشل التحقق (بريد إلكتروني أو نطاق أو نوع غير صالح)
400INVALID_EMAIL_FORMATتنسيق عنوان البريد الإلكتروني غير صالح
400CONTENT_TOO_LARGEحجم ملف CSV يتجاوز 5 ميغابايت
403SUPPRESSION_LOCKEDلا يمكن حذف حظر مقفل
404RESOURCE_NOT_FOUNDالحظر غير موجود، أو mailingListId المُرسَل لا يُسمّي أي قائمة بريدية في مستأجرك

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

في هذه الصفحة