نمای کلی ایمیل ورودی
دریافت و پردازش ایمیلهای ورودی با گیتوی ورودی Mail.Land
گیتوی ورودی MailLand ایمیلهای رسیده به دامنههای شما را دریافت میکند و آنها را از طریق وبهوک به اپلیکیشن شما تحویل میدهد، یا برای دریافت بعدی ذخیره میکند. از پردازش ایمیل ورودی برای ساخت صندوقهای پشتیبانی، تجزیهٔ ایمیلهای تولیدشده توسط ماشین، یا مسیردهی پاسخها به اپلیکیشن خود استفاده کنید.
نحوهٔ کار
دامنهٔ خود را پیکربندی کنید
رکوردهای MX دامنهٔ خود را به سرورهای ورودی MailLand اشاره دهید. دامنه به inboundEnabled و یک تننت فعال نیاز دارد. MailLand ایمیل را فقط برای گیرندهای که با یک مسیر فعال مطابقت دارد میپذیرد، یا در صورت روشنبودن catchAllEnabled برای هر آدرسی؛ در غیر این صورت در مرحلهٔ RCPT رد میشود.
قواعد مسیردهی بسازید
مسیرهایی تعریف کنید که بخش محلی آدرس گیرنده را تطبیق میدهند و برای آنها یک عملیات (فوروارد، وبهوک یا ذخیره) تعیین کنید.
دریافت ایمیلهای تجزیهشده
MailLand ایمیل را پردازش میکند؛ هدرها، بدنه و پیوستها را تجزیه میکند و نتیجه را به نقطهٔ پایانی وبهوک شما تحویل میدهد یا برای دریافت از طریق API ذخیره میکند.
تنظیمات ایمیل ورودی
تنظیمات بهازای هر دامنه است، نه در سطح کل ورکاسپیس:
GET https://api.mail.land/v1/transactional/inbound/domains/{domainId}/settings
PUT https://api.mail.land/v1/transactional/inbound/domains/{domainId}/settingsبا Authorization: Bearer <token> یا X-API-Key: <api key> احراز هویت کنید.
curl https://api.mail.land/v1/transactional/inbound/domains/k3v9x2m8q1w7z4/settings \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."{
"isEnabled": true,
"catchAllEnabled": true,
"maxMessageSizeBytes": 26214400,
"retentionDays": 30,
"dailyLimit": 10000,
"storeEmails": true
}بهروزرسانی تنظیمات:
PUT https://api.mail.land/v1/transactional/inbound/domains/k3v9x2m8q1w7z4/settings{
"isEnabled": true,
"catchAllEnabled": true,
"maxMessageSizeBytes": 26214400,
"retentionDays": 30,
"dailyLimit": 10000,
"storeEmails": true
}curl -X PUT https://api.mail.land/v1/transactional/inbound/domains/k3v9x2m8q1w7z4/settings \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{
"isEnabled": true,
"catchAllEnabled": true,
"maxMessageSizeBytes": 26214400,
"retentionDays": 30,
"dailyLimit": 10000,
"storeEmails": true
}'| فیلد | نوع | توضیح |
|---|---|---|
isEnabled | bool | فعال یا غیرفعالکردن پردازش ایمیل ورودی برای این دامنه |
catchAllEnabled | bool | پذیرش ایمیل برای هر گیرندهای در دامنه، نه فقط گیرندگانی که با یک مسیر فعال مطابقت دارند |
maxMessageSizeBytes | int | حداکثر حجم پیام مجاز برای این دامنه بر حسب بایت، که با کد SMTP 552 5.3.4 اعمال میشود. رابط تنظیمات مقادیر تا ۵۰ مبیبایت را میپذیرد، اما پلتفرم صرفنظر از این تنظیم هرگز بیش از ۲۵ مبیبایت را نمیپذیرد |
dailyLimit | int | حداکثر پیامهای ورودی پذیرفتهشده در روز برای این دامنه |
retentionDays | int | تعداد روزهای نگهداری ایمیلهای ذخیرهشده. پیشفرض ۳۰ روز، مجاز از ۱ تا ۹۰ |
storeEmails | bool | اینکه آیا ایمیل تجزیهشدهٔ کامل برای دریافت بعدی ذخیره شود یا نه |
routeCount | int | تعداد مسیرهای پیکربندیشده برای این دامنه |
هیچ اسکن ویروسی وجود ندارد، و هیچ webhookUrl/webhookSecret واحدی در سطح ورکاسپیس وجود ندارد؛ وبهوکها بهازای هر مسیر از طریق webhookId متصل میشوند (به مسیرها مراجعه کنید).
maxMessageSizeBytes، dailyLimit و retentionDays واقعاً اعمال میشوند. ایمیل در آدرس <inboundSubdomain>.<domain>، همان میزبانی که رکورد MX به آن اشاره میکند، دریافت میشود و دامنهٔ ریشه هم همچنان دریافتکننده است. پیامی که از maxMessageSizeBytes تعیینشده برای دامنه بیشتر باشد، با کد SMTP 552 5.3.4 رد میشود و حتی با تنظیم مقداری بزرگتر، هرگز از سقف پلتفرم یعنی ۲۵ مبیبایت فراتر نمیرود (رابط تنظیمات تا ۵۰ مبیبایت را میپذیرد، اما فقط ۲۵ مبیبایت اعمال میشود). بهمحض رسیدن به dailyLimit (پیشفرض ۱۰٬۰۰۰) در طول روز، فرستندهها یک پاسخ موقت 452 4.2.2 دریافت میکنند و باید بعداً دوباره تلاش کنند؛ ایمیل از بین نمیرود. پیامهای ذخیرهشده پس از سپریشدن retentionDays (پیشفرض ۳۰ روز، بازهٔ مجاز ۱ تا ۹۰ روز) حذف میشوند.
وضعیتهای ایمیل
بهصورت رشتهٔ متنی بازگردانده میشود، نه عدد:
| وضعیت | توضیح |
|---|---|
Received | ایمیل دریافت شده، در انتظار پردازش |
Processing | در حال پردازش (تجزیه، بررسی اسپم، مسیردهی) |
Processed | پردازش شده و عملیات آن کامل شده است |
Delivered | با موفقیت تحویل داده شده (فوروارد یا ارسال وبهوک) |
Failed | پردازش ناموفق بود |
Expired | دورهٔ نگهداری سپری شده؛ ایمیل حذف شده است |
وضعیت جداگانهای بهنام Quarantined وجود ندارد؛ اسپم یک پرچم بولی isSpam روی ایمیل است، مستقل از status.
فهرست ایمیلهای ورودی
GET https://api.mail.land/v1/transactional/inbound/emailscurl https://api.mail.land/v1/transactional/inbound/emails \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."| پارامتر | نوع | پیشفرض | توضیح |
|---|---|---|---|
cursor | string | - | مکاننمای مبهم از nextCursor صفحهٔ قبلی. برای صفحهٔ اول حذف شود. |
limit | int | 20 | تعداد آیتم در هر صفحه (حداکثر ۱۰۰)، بهجای ردشدن محدود میشود |
domainId | string | - | فیلتر بر اساس شناسهٔ عمومی دامنه |
status | string | - | فیلتر بر اساس وضعیت ایمیل (Received، Processing، Processed، Delivered، Failed، Expired) |
routeId | string | - | فیلتر بر اساس مسیر مطابقتیافته |
isSpam | bool | - | فیلتر بر اساس پرچم اسپم. مشخصکردن isSpam (چه true چه false) خودش بُعد اسپم را تعیین میکند و فیلتر پیشفرض excludeQuarantined را غیرفعال میسازد؛ در نتیجه isSpam=true ردیفهای اسپم را برمیگرداند (همچنان تابع قانون «فقط ذخیرهشدهها» در پایین است). برای حفظ رفتار پیشفرض صندوق ورودی که اسپم را پنهان میکند، isSpam را ارسال نکنید. |
from | datetime | - | ایمیلهای دریافتشده پس از این زمان |
to | datetime | - | ایمیلهای دریافتشده پیش از این زمان |
search | string | - | جستوجو در موضوع و فرستنده (آدرس یا نام)؛ با گیرنده مطابقت داده نمیشود |
sortBy | string | - | فیلد مرتبسازی: subject، from، یا پیشفرض receivedAt |
sortDesc | bool | true | مرتبسازی نزولی |
excludeQuarantined | bool | true | حذف ایمیلهای علامتخورده بهعنوان اسپم از فهرست. در صورت مشخصشدن isSpam نادیده گرفته میشود. |
includeWebhookOnly | bool | false | افزودن ایمیلهایی که هنگام دریافت ذخیره نشدهاند (مسیرهای فقطوبهوک یا حذفی) به فهرست. اینها بهطور پیشفرض پنهاناند، پس مستأجری که همهٔ مسیرهایش فقطوبهوک است، اینجا فهرستی خالی میبیند. |
جستوجوی صرفاً بر اساس subject وجود ندارد، فیلتر مستقل آدرس فرستنده یا گیرنده هم وجود ندارد، و from/to در اینجا تاریخ هستند نه آدرس (برای تطبیق متنی فرستنده/موضوع از search استفاده کنید).
{
"items": [
{
"id": "k7m2x9q4p1w8z3",
"domainId": "k3v9x2m8q1w7z4",
"domainName": "yourdomain.com",
"matchedRouteId": "r7k3m9q2p4w8x1",
"matchedRouteName": "Support inbox",
"fromAddress": "[email protected]",
"fromName": "Customer Name",
"subject": "Need help with my account",
"textPreview": "Hi, I need help with...",
"hasHtml": true,
"hasText": true,
"attachmentCount": 1,
"sizeBytes": 45230,
"status": "Delivered",
"spfResult": "Pass",
"dkimResult": "Pass",
"dmarcResult": "Pass",
"isSpam": false,
"spamScore": 1.2,
"receivedAt": "2026-02-17T14:30:00Z",
"expiresAt": "2026-03-19T14:30:00Z"
}
],
"nextCursor": "eyJ2IjoxLCJzIjoiY3JlYXRlZGF0OmRlc2MiLCJrIjoi...",
"hasMore": true
}فیلد to روی آیتم فهرست وجود ندارد؛ گیرندهها در پاسخ جزئیات، در envelopeRecipients/headerRecipients قرار دارند. status رشتهٔ متنی است، نه عدد.
دریافت جزئیات ایمیل
GET https://api.mail.land/v1/transactional/inbound/emails/{id}curl https://api.mail.land/v1/transactional/inbound/emails/{id} \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."ابرداده، هدرها، یک پیشنمایش متنی و ابردادهٔ پیوستهای ایمیل تجزیهشده را برمیگرداند؛ نه بدنهٔ کامل HTML یا متن. برای آن، پیام خام را دریافت کنید (به ادامه مراجعه کنید).
{
"id": "k7m2x9q4p1w8z3",
"domainId": "k3v9x2m8q1w7z4",
"domainName": "yourdomain.com",
"matchedRouteId": "r7k3m9q2p4w8x1",
"matchedRouteName": "Support inbox",
"fromAddress": "[email protected]",
"fromName": "Customer Name",
"subject": "Need help with my account",
"textPreview": "Hi, I need assistance with...",
"hasHtml": true,
"hasText": true,
"attachmentCount": 1,
"sizeBytes": 45230,
"status": "Delivered",
"spfResult": "Pass",
"dkimResult": "Pass",
"dmarcResult": "Pass",
"isSpam": false,
"spamScore": 1.2,
"receivedAt": "2026-02-17T14:30:00Z",
"expiresAt": "2026-03-19T14:30:00Z",
"envelopeFrom": "[email protected]",
"replyTo": "[email protected]",
"messageId": "<[email protected]>",
"inReplyTo": null,
"dateHeader": "2026-02-17T14:30:00Z",
"authResultsHeader": "spf=pass dkim=pass dmarc=pass",
"spamReason": null,
"sourceIp": "203.0.113.5",
"heloHostname": "mail.example.com",
"processingError": null,
"processedAt": "2026-02-17T14:30:01Z",
"envelopeRecipients": [
{ "address": "[email protected]", "localPart": "support", "matchedRouteId": "r7k3m9q2p4w8x1" }
],
"headerRecipients": [
{ "type": "To", "address": "[email protected]", "name": null }
],
"attachments": [
{ "id": "a3k7m2q9p4w1x8", "fileName": "screenshot.png", "contentType": "image/png", "sizeBytes": 34500, "isInline": false, "contentId": null }
],
"webhookAttempts": [
{ "attemptNumber": 1, "status": "Delivered", "webhookUrl": "https://yourapp.com/webhooks/inbound", "httpStatusCode": 200, "errorMessage": null, "durationMs": 145, "attemptedAt": "2026-02-17T14:30:02Z", "nextRetryAt": null }
]
}نتایج احراز هویت
هر ایمیل ورودی شامل نتایج بررسی SPF، DKIM و DMARC است. مقادیر ممکن برای هر بررسی متفاوت است:
headerRecipients[].type مقدار "To"، "Cc" یا "Bcc" است (با همین حروفبزرگوکوچک)، و
dateHeader یک برچسبزمانی بهقالب ISO 8601 است، نه رشتهٔ خام هدر RFC 2822.
spfResult | توضیح |
|---|---|
None | رکورد SPF یافت نشد یا بررسی انجام نشد |
Pass | فرستنده مجاز است |
Fail | فرستنده مجاز نیست |
SoftFail | ممکن است فرستنده مجاز نباشد |
Neutral | بیانیهای دربارهٔ مجازبودن وجود ندارد |
TempError | خطای موقت DNS |
PermError | خطای دائمی DNS |
dkimResult | توضیح |
|---|---|
None | امضای DKIM یافت نشد یا بررسی انجام نشد |
Pass | امضا تأیید شد |
Fail | تأیید امضا ناموفق بود |
TempError | خطای موقت DNS |
PermError | خطای دائمی DNS |
dmarcResult | توضیح |
|---|---|
None | سیاست DMARC یافت نشد یا بررسی انجام نشد |
Pass | همسویی موفق بود |
Fail | همسویی ناموفق بود |
Quarantine | سیاست، قرنطینه را توصیه میکند |
Reject | سیاست، رد را توصیه میکند |
دانلود ایمیل خام
GET https://api.mail.land/v1/transactional/inbound/emails/{id}/rawcurl https://api.mail.land/v1/transactional/inbound/emails/{id}/raw \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-o email.emlایمیل خام اصلی (با قالب RFC 5322) را بهصورت فایل قابلدانلود برمیگرداند.
حذف ایمیلها
حذف یک ایمیل:
DELETE https://api.mail.land/v1/transactional/inbound/emails/{id}curl -X DELETE https://api.mail.land/v1/transactional/inbound/emails/{id} \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."حذف گروهی ایمیلها:
POST https://api.mail.land/v1/transactional/inbound/emails/bulk-delete{
"ids": ["k7m2x9q4p1w8z3", "p3q8w2x7m9k4z1", "w9k3p7m2q8x4z6"]
}curl -X POST https://api.mail.land/v1/transactional/inbound/emails/bulk-delete \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{
"ids": ["k7m2x9q4p1w8z3", "p3q8w2x7m9k4z1", "w9k3p7m2q8x4z6"]
}'همچنین POST /v1/transactional/inbound/emails/bulk-mark-spam با همان بدنهٔ {"ids": [...]} وجود دارد، برای علامتگذاری همان دستهٔ ایمیلها بهعنوان اسپم در یک فراخوانی.
قرنطینه
ایمیلهایی با isSpam: true اینجا نمایش داده میشوند (هیچ اسکن ویروسی وجود ندارد و وضعیت جداگانهای بهنام Quarantined هم نیست؛ اسپم فقط یک پرچم بولی است). مشاهدهٔ ایمیلهای قرنطینهشده:
GET https://api.mail.land/v1/transactional/inbound/quarantinecurl https://api.mail.land/v1/transactional/inbound/quarantine \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."آزادکردن یک ایمیل از قرنطینه:
POST https://api.mail.land/v1/transactional/inbound/quarantine/{id}/releasecurl -X POST https://api.mail.land/v1/transactional/inbound/quarantine/{id}/release \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."آزادکردن یک ایمیل فقط پرچم isSpam آن را پاک میکند. مسیردهی را دوباره اجرا نمیکند و وبهوکها را دوباره ارسال نمیکند. برای تحویل دوبارهٔ وبهوک یک ایمیل آزادشده (یا هر ایمیل دیگری)، POST /v1/transactional/inbound/emails/{id}/replay-webhook را فراخوانی کنید. این درخواست یک تحویل پایدار را به وبهوک مسیر منطبق در صف قرار میدهد و 202 Accepted برمیگرداند (بخش Inbound Webhooks را ببینید). یک پارامتر اختیاری ?addToAllowlist=true هم فرستنده را در زمان آزادسازی به فهرست مجاز اضافه میکند.
فهرست مجاز و فهرست مسدود
فهرست مجاز
ایمیلهای فرستندگان موجود در فهرست مجاز از فیلتر اسپم عبور میکنند:
GET https://api.mail.land/v1/transactional/inbound/allowlistcurl https://api.mail.land/v1/transactional/inbound/allowlist \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."POST https://api.mail.land/v1/transactional/inbound/allowlist{
"pattern": "[email protected]",
"matchType": "ExactEmail",
"description": "Trusted partner"
}curl -X POST https://api.mail.land/v1/transactional/inbound/allowlist \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{
"pattern": "[email protected]",
"matchType": "ExactEmail",
"description": "Trusted partner"
}'بهصورت رشتهٔ متنی ارسال و بازگردانده میشود، نه عدد:
| نوع تطبیق | توضیح |
|---|---|
ExactEmail | تطبیق دقیق آدرس ایمیل |
Domain | تطبیق همهٔ ایمیلهای یک دامنه |
WildcardPattern | تطبیق با الگوی عام (wildcard) |
فهرست مسدود
ایمیلهای فرستندگان مسدودشده بهصورت خودکار مدیریت میشوند:
GET https://api.mail.land/v1/transactional/inbound/blocklistcurl https://api.mail.land/v1/transactional/inbound/blocklist \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."POST https://api.mail.land/v1/transactional/inbound/blocklist{
"pattern": "[email protected]",
"matchType": "ExactEmail",
"action": "RejectAtSmtp",
"description": "Known spammer"
}curl -X POST https://api.mail.land/v1/transactional/inbound/blocklist \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{
"pattern": "[email protected]",
"matchType": "ExactEmail",
"action": "RejectAtSmtp",
"description": "Known spammer"
}'بهصورت رشتهٔ متنی ارسال و بازگردانده میشود، نه عدد. در صورت حذفنشدن، عملیات پیشفرض MarkAsSpam است:
| عملیات مسدودسازی | توضیح |
|---|---|
RejectAtSmtp | رد در سطح SMTP (پاسخ ۵۵۰) |
MarkAsSpam | پذیرش، اما علامتگذاری بهعنوان اسپم (پیشفرض) |
Drop | حذف بیسروصدای ایمیل |
حذف از فهرست مجاز یا فهرست مسدود:
DELETE https://api.mail.land/v1/transactional/inbound/allowlist/{id}
DELETE https://api.mail.land/v1/transactional/inbound/blocklist/{id}# Delete from allowlist
curl -X DELETE https://api.mail.land/v1/transactional/inbound/allowlist/{id} \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
# Delete from blocklist
curl -X DELETE https://api.mail.land/v1/transactional/inbound/blocklist/{id} \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."آمار ایمیل ورودی
GET https://api.mail.land/v1/transactional/inbound/statscurl https://api.mail.land/v1/transactional/inbound/stats \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."| پارامتر | نوع | توضیح |
|---|---|---|
domainId | string | فیلتر بر اساس شناسهٔ عمومی دامنه |
from | datetime | فیلتر بر اساس receivedAt در یا پس از این زمان |
to | datetime | فیلتر بر اساس receivedAt پیش از پایان این روز |
{
"totalEmails": 1500,
"todayEmails": 42,
"receivedCount": 1500,
"processingCount": 5,
"processedCount": 1345,
"failedCount": 20,
"spamCount": 80,
"webhookFailedCount": 3,
"storageUsedBytes": 52428800,
"byDomain": [
{ "domainId": "k3v9x2m8q1w7z4", "domainName": "yourdomain.com", "count": 1500 }
],
"byStatus": { "Received": 5, "Processing": 5, "Processed": 1345, "Delivered": 1300, "Failed": 20, "Expired": 50 },
"dailyStats": [
{ "date": "2026-02-17", "total": 120, "processed": 115, "spam": 8 }
]
}فیلد spamRate/averageSizeBytes وجود ندارد؛ ساختار بالا کامل و جامع است.
پاسخهای خطا
| وضعیت | کد | توضیح |
|---|---|---|
400 | VALIDATION_FAILED | پارامترهای درخواست نامعتبر |
403 | FORBIDDEN | دسترسی ناکافی |
404 | RESOURCE_NOT_FOUND | ایمیل یافت نشد |