MailLandDocs
قابلیت تحویل

لیست‌های محدودیت

مدیریت لیست‌های محدودیت برای جلوگیری از ارسال به آدرس‌های نامعتبر، لغو اشتراک‌شده یا شکایت‌شده

لیست محدودیت از ارسال ایمیل به آدرس‌هایی که برگشتی داشته‌اند، لغو اشتراک کرده‌اند یا شکایت ثبت کرده‌اند جلوگیری می‌کند. MailLand محدودیت‌ها را به‌صورت خودکار از رویدادهای برگشتی و شکایت مدیریت می‌کند و شما می‌توانید ورودی‌ها را به‌صورت دستی از طریق API اضافه یا حذف کنید.

انواع محدودیت

نوعمقدارتوضیحمحدوده پیش‌فرض
HardBounce1خرابی دائمی در تحویلGlobal (همیشه)
SoftBounce2خرابی موقت (حذف بازاریابی ۳۰روزه؛ ارتقا فقط پس از حداقل ۳ برگشتی واجد شرایط در بازه‌ای حداقل ۷روزه)Marketing (انقضای ۳۰ روزه)
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آیتم در هر صفحه (حداکثر ۱۰۰)
searchstring-فیلتر بر اساس آدرس ایمیل
typeSuppressionType-فیلتر بر اساس نوع
scopeSuppressionScope-فیلتر بر اساس محدوده
mailingListIdstring-شناسه عمومی لیست پستی که در تننت شما بازشناسی می‌شود. شناسه ناشناخته، متعلق به تننت دیگر یا عددی، خطای 404 برمی‌گرداند.
fromDatedatetime۹۰ روز قبلتاریخ شروع
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"
}

بررسی گروهی

بررسی تا ۱٬۰۰۰ ایمیل به‌طور همزمان:

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بله-آدرس ایمیل (حداکثر ۲۵۵ کاراکتر)
suppressionTypestringخیرManualنوع محدودیت
scopestringخیرGlobalمحدوده محدودیت
mailingListIdstringخیر-شناسه عمومی لیست پستی که در تننت شما بازشناسی می‌شود. در صورتی که محدوده List باشد الزامی است؛ شناسه ناشناخته، متعلق به تننت دیگر یا عددی، خطای 404 برمی‌گرداند.
reasonstringخیر-دلیل (حداکثر ۵۰۰ کاراکتر)
notesstringخیر-یادداشت‌های داخلی

پاسخ 201 Created به همراه شیء محدودیت کامل برمی‌گرداند. هدر Location برابر است با /v1/transactional/suppressions: یعنی همان مسیر فهرست، چون مسیری برای دریافت بر اساس شناسه وجود ندارد. از فیلد id در بدنهٔ پاسخ برای شناسایی محدودیت ایجادشده استفاده کنید، و برای جست‌وجوی آن به بخش‌های «فهرست محدودیت‌ها» یا «بررسی محدودیت یک ایمیل» در پایین مراجعه کنید.

افزودن گروهی

افزودن تا ۱٬۰۰۰ محدودیت به‌طور همزمان:

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 (حداکثر ۵ مگابایت) با آدرس‌های ایمیل جداشده با کاما یا خط جدید آپلود کنید. سطر هدر حاوی "email" به‌صورت خودکار نادیده گرفته می‌شود.

پارامترهای کوئری:

پارامترنوعتوضیح
filefile (فیلد فرم چندبخشی)فایل CSV (حداکثر ۵ مگابایت، پسوند .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 حداکثر ۱۰ ورودی نامعتبر را نشان می‌دهد. ایمیل‌های از قبل موجود به‌عنوان 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. محدود به ۱۰۰٬۰۰۰ سطر.

حذف محدودیت

بر اساس شناسه

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 بیش از ۵ مگابایت است
403SUPPRESSION_LOCKEDحذف محدودیت قفل‌شده امکان‌پذیر نیست
404RESOURCE_NOT_FOUNDمحدودیت یافت نشد، یا mailingListId ارسالی هیچ لیست پستی‌ای را در تننت شما نام نمی‌برد

مراحل بعدی

در این صفحه