MailLandDocs
دامنه‌ها

تایید دامنه

تایید مالکیت دامنه از طریق اعتبارسنجی رکوردهای DNS

پس از پیکربندی رکوردهای DNS، تأیید را فعال کنید تا مالکیت دامنه را اثبات کرده و ارسال ایمیل را فعال کنید. MailLand رکوردهای SPF، DKIM، DMARC و مسیر بازگشت را بررسی می‌کند.

تأیید یک دامنه

POST https://api.mail.land/v1/domains/{id}/verify

با استفاده از Authorization: Bearer <token> یا X-API-Key: <api key> احراز هویت کنید.

Verify a domain
curl -X POST https://api.mail.land/v1/domains/k3v9x2m8q1w7z4/verify \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

پاسخ

Verification response
{
  "domainId": "k3v9x2m8q1w7z4",
  "domain": "yourdomain.com",
  "isVerified": true,
  "spfStatus": "valid",
  "dkimStatus": "valid",
  "dmarcStatus": "valid",
  "verifiedAt": "2026-02-17T10:15:00Z",
  "message": "Domain successfully verified with all DNS records valid",
  "dnsRecords": {
    "spfRecord": "v=spf1 include:spf.mlnd.net ~all",
    "dkimSelector": "mlnd",
    "dkimRecord": "v=DKIM1; k=rsa; p=MIIBIjANBgkq...",
    "dmarcRecord": "v=DMARC1; p=none; rua=mailto:[email protected]"
  },
  "trackingVerified": false,
  "bounceVerified": true,
  "bounceVerifiedAt": "2026-02-17T10:15:00Z",
  "mxVerified": false,
  "lastDnsCheckAt": "2026-02-17T10:15:00Z"
}
فیلدنوعتوضیح
domainIdstringشناسه عمومی دامنه
domainstringنام دامنه
isVerifiedbooleanفقط وقتی true است که SPF، DKIM و DMARC همگی valid باشند
spfStatus, dkimStatus, dmarcStatusenumوضعیت رکورد: pending، valid یا invalid
verifiedAtdatetimeزمان تأیید دامنه
messagestringخلاصه نتیجه
dnsRecordsobjectرکوردهای SPF، DKIM (همراه dkimSelector) و DMARC یافت‌شده در DNS، یا مقدار مورد انتظار وقتی رکوردی یافت نشود
spfErrorMessage, dkimErrorMessage, dmarcErrorMessagestringدلیل رد شدن رکورد؛ اگر پذیرفته شود حذف می‌شود
trackingVerified, bounceVerified, mxVerifiedbooleanاینکه دامنه ردیابی سفارشی، دامنه برگشتی سفارشی (Return-Path) و رکورد MX ورودی تأیید شده‌اند یا نه
trackingVerifiedAt, bounceVerifiedAt, mxVerifiedAtdatetimeزمان تأیید هر کدام
trackingErrorMessage, bounceErrorMessage, mxErrorMessagestringدلیل رد شدن هر کدام؛ فقط برای مواردی که روشن کرده‌اید برگردانده می‌شود
lastDnsCheckAtdatetimeزمان آخرین بررسی DNS

وضعیت‌های رکورد

هر بررسی رکورد DNS یکی از این وضعیت‌ها را برمی‌گرداند:

وضعیتتوضیح
pendingهنوز بررسی نشده
validرکورد یافت شد و درست است
invalidرکورد وجود ندارد یا نادرست است

الزامات تأیید

برای تأیید دامنه (isVerified: true)، SPF، DKIM و DMARC باید همگی valid باشند:

رکوردالزامیباید گذر کند
SPFبلهinclude:spf.mlnd.net باید وجود داشته باشد
DKIMبلهکلید عمومی معتبر برای کلید DKIM فعال
DMARCبلهرکوردی در _dmarc که با v=DMARC1 شروع شود و سیاست داشته باشد (p=none، p=quarantine یا p=reject)
مسیر بازگشتخیر (برای دامنه‌های جدید به‌صورت پیش‌فرض روشن است؛ ارسال را مسدود نمی‌کند)CNAME به bounce.mlnd.net، فقط DNS (بدون پروکسی)
ردیابیخیر (فقط با دامنه ردیابی سفارشی)CNAME به track.mlnd.net، فقط DNS (بدون پروکسی)
MX ورودیخیر (فقط با ایمیل ورودی)MX به mx.mlnd.net

رکوردهای اختیاری مقدار isVerified را تغییر نمی‌دهند. دامنه ردیابی یا برگشتی سفارشی فقط پس از تأیید رکورد خودش برای ارسال استفاده می‌شود؛ تا آن زمان MailLand از میزبان‌های پیش‌فرض خود استفاده می‌کند.

تأیید جزئی

اگر برخی رکوردها پیدا شوند اما برخی دیگر موجود نباشند، پاسخ دقیقاً نشان می‌دهد چه چیزی نیاز به توجه دارد:

Partial verification
{
  "domainId": "k3v9x2m8q1w7z4",
  "domain": "yourdomain.com",
  "isVerified": false,
  "spfStatus": "valid",
  "dkimStatus": "invalid",
  "dmarcStatus": "invalid",
  "message": "Domain verification incomplete. Please check DNS records below.",
  "dnsRecords": {
    "spfRecord": "v=spf1 include:spf.mlnd.net ~all",
    "dkimSelector": "mlnd",
    "dkimRecord": "v=DKIM1; k=rsa; p=MIIBIjANBgkq...",
    "dmarcRecord": "v=DMARC1; p=quarantine; pct=100; adkim=r; aspf=r; rua=mailto:[email protected]; sp=none"
  },
  "dkimErrorMessage": "DKIM record not found. Please add the TXT record to your DNS.",
  "dmarcErrorMessage": "DMARC record not found. Please add TXT record at _dmarc subdomain.",
  "trackingVerified": false,
  "trackingErrorMessage": "CNAME record not found. Please add a CNAME record for track.yourdomain.com pointing to track.mlnd.net",
  "bounceVerified": false,
  "mxVerified": false,
  "lastDnsCheckAt": "2026-02-17T10:20:00Z"
}

تأیید مجدد خودکار

MailLand به طور دوره‌ای دامنه‌های تأییدشده را در پس‌زمینه از طریق PendingDomainVerificationWorker و DnsHealthCheckWorker بررسی می‌کند:

  • دامنه‌های در انتظار: تا ۷ روز پس از افزودن، هر ساعت دوباره بررسی می‌شوند؛ پس از آن باید به‌صورت دستی تأیید شوند
  • دامنه‌های تأییدشده: سلامت DNS به صورت دوره‌ای بررسی می‌شود تا رکوردهای حذف‌شده یا تغییریافته شناسایی شوند

اگر رکوردهای DNS یک دامنه تأییدشده بعداً حذف یا تغییر داده شوند، وضعیت رکورد آسیب‌دیده (spfStatus/dkimStatus/dmarcStatus) به invalid تبدیل می‌شود، isFullyVerified برابر false می‌شود و ارسال تا زمان رفع مشکل رکورد متوقف می‌شود. خود verificationStatus همچنان Verified باقی می‌ماند: MailLand به‌محض درست شدن دوباره DNS، وضعیت رکورد را به‌طور خودکار بازمی‌گرداند.

بررسی سلامت دامنه

یک بررسی سلامت بر اساس تقاضا که فراتر از تأیید پایه است اجرا کنید:

POST https://api.mail.land/v1/domains/{id}/health-check
Run a health check
curl -X POST https://api.mail.land/v1/domains/k3v9x2m8q1w7z4/health-check \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Health check response
{
  "domainName": "yourdomain.com",
  "status": "warning",
  "previousStatus": "healthy",
  "issues": [
    {
      "code": "DmarcNonePolicy",
      "message": "DMARC policy is set to 'none' (monitoring only)",
      "severity": "warning",
      "record": "DMARC",
      "details": "Consider upgrading to p=quarantine or p=reject"
    }
  ],
  "statusChanged": true,
  "checkedAt": "2026-02-17T10:30:00Z",
  "observationId": { "value": "3f2c9a1e-7b4d-4c1a-9e0f-5a6b7c8d9e0f" },
  "spf": {
    "lookupCompleted": true,
    "isValid": true,
    "value": "v=spf1 include:spf.mlnd.net ~all",
    "issues": [],
    "recordVerdict": "valid"
  },
  "dkim": {
    "lookupCompleted": true,
    "isValid": true,
    "issues": [],
    "recordVerdict": "valid"
  },
  "dmarc": {
    "lookupCompleted": true,
    "isValid": true,
    "value": "v=DMARC1; p=none; rua=mailto:[email protected]",
    "issues": [
      {
        "code": "DmarcNonePolicy",
        "message": "DMARC policy is set to 'none' (monitoring only)",
        "severity": "warning",
        "record": "DMARC",
        "details": "Consider upgrading to p=quarantine or p=reject"
      }
    ],
    "recordVerdict": "valid"
  }
}

وضعیت‌های سلامت

وضعیتتوضیح
healthyهمه بررسی‌ها گذر کرده‌اند: هیچ مشکلی شناسایی نشده
warningدامنه کار می‌کند اما پیشرفت‌های احتمالی وجود دارد
criticalدامنه مشکلاتی دارد که ممکن است از تحویل ایمیل جلوگیری کند
unknownتعیین وضعیت امکان‌پذیر نیست (خطای جستجوی DNS)

کدهای مشکل

کدشدتتوضیح
DnsNxDomaincriticalدامنه وجود ندارد (با تأیید یک resolver مستقل دوم)
SpfMissingcriticalرکورد SPF پیدا نشد
SpfMissingIncludecriticalرکورد SPF شامل spf.mlnd.net نیست
SpfPermErrorcriticalبیش از یک رکورد SPF (خطای دائمی SPF)
SpfTooManyLookupswarningرکورد SPF به بیش از ۱۰ جستجوی DNS نیاز دارد
DkimMissingcriticalرکورد DKIM پیدا نشد
DkimMissingSelectorcriticalدر سلکتور یک کلید فعال رکورد DKIM وجود ندارد
DkimKeyMismatchcriticalکلید DKIM در DNS با کلید MailLand مطابقت ندارد
DkimRevokedcriticalکلید DKIM باطل شده است (تگ p= خالی)
DmarcMissingwarningرکورد DMARC پیدا نشد
DmarcNonePolicywarningسیاست DMARC روی none است (فقط نظارت)
MxMissingcriticalرکورد MX وجود ندارد (فقط وقتی ایمیل ورودی روشن است بررسی می‌شود)
MxWrongHostwarningرکورد MX به mx.mlnd.net اشاره نمی‌کند
DnsTimeout, DnsServFail, DnsLookupFailedwarningجستجوی DNS کامل نشد؛ دربارهٔ رکورد نتیجه‌ای گرفته نشد

تاریخچه سلامت

نتایج تاریخی بررسی سلامت را مشاهده کنید. پارامترهای پرسمان اختیاری from/to (تاریخ‌های ISO 8601) بازه را محدود می‌کنند:

GET https://api.mail.land/v1/domains/{id}/health-history
Get health history
curl https://api.mail.land/v1/domains/k3v9x2m8q1w7z4/health-history \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Health history response
[
  {
    "domainName": "yourdomain.com",
    "prevStatus": "healthy",
    "newStatus": "warning",
    "issues": ["DmarcNonePolicy"],
    "reason": "Scheduled health check",
    "checkedAt": "2026-02-17T10:30:00Z"
  },
  {
    "domainName": "yourdomain.com",
    "prevStatus": "warning",
    "newStatus": "healthy",
    "issues": [],
    "reason": "Scheduled health check",
    "checkedAt": "2026-02-16T10:30:00Z"
  }
]

پاسخ یک آرایهٔ ساده است (بدون پوشش items، بدون nextCursor/hasMore).

عیب‌یابی

رکورد SPF پیدا نشد

  • مطمئن شوید که دقیقاً یک رکورد TXT مربوط به SPF در دامنه ریشه خود دارید
  • چندین رکورد SPF باعث شکست می‌شوند: آن‌ها را در یک رکورد ادغام کنید
  • بررسی کنید که include:spf.mlnd.net قبل از مکانیزم ~all یا -all قرار دارد

رکورد DKIM پیدا نشد

  • تأیید کنید که رکورد در mlnd._domainkey.yourdomain.com است (نه mlnd._domainkey)
  • نوع رکورد باید TXT باشد (نه CNAME)
  • برخی ارائه‌دهندگان DNS به گیومه‌های دور مقادیر طولانی TXT نیاز دارند
  • فضاها یا خط‌های جدید پس از کپی‌کردن کلید عمومی را بررسی کنید

CNAME مسیر بازگشت پیدا نشد

  • تأیید کنید که CNAME در bounce.yourdomain.com است (یا زیردامنه سفارشی برگشت شما)
  • مقدار CNAME باید bounce.mlnd.net باشد (نه یک آدرس IP و نه رکورد MX)
  • کاربران Cloudflare: مطمئن شوید که پروکسی غیرفعال است (ابر خاکستری / DNS only)

تأخیر انتشار DNS

  • اکثر تغییرات DNS ظرف ۵ تا ۱۵ دقیقه منتشر می‌شوند
  • اگر از TTL پایین (۳۰۰ ثانیه) استفاده می‌کنید، تغییرات باید سریع ظاهر شوند
  • رکوردهای موجود با TTL بالا ممکن است تا ۴۸ ساعت طول بکشد تا در سطح جهانی به‌روز شوند
  • پس از ۱۵ دقیقه صبر دوباره تأیید را امتحان کنید

مراحل بعدی

در این صفحه