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اسم النطاق
isVerifiedbooleantrue فقط عندما تكون 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:

  • النطاقات المعلقة: تُعاد فحصها كل ساعة لمدة 7 أيام بعد إضافتها؛ بعد ذلك، يجب التحقق يدوياً
  • النطاقات المُتحقَّق منها: يتم فحص صحة 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النطاق غير موجود (بتأكيد من محلّل ثانٍ مستقل)
SpfMissingcriticalلم يتم العثور على سجل SPF
SpfMissingIncludecriticalسجل SPF لا يتضمن spf.mlnd.net
SpfPermErrorcriticalأكثر من سجل SPF واحد (خطأ SPF دائم)
SpfTooManyLookupswarningيحتاج سجل SPF إلى أكثر من 10 استعلامات 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 في غضون 5 إلى 15 دقيقة
  • إذا كنت تستخدم TTL منخفضاً (300 ثانية)، يجب أن تظهر التغييرات بسرعة
  • قد تستغرق السجلات الموجودة ذات TTL العالية ما يصل إلى 48 ساعة للتحديث على مستوى العالم
  • حاول التحقق مرة أخرى بعد الانتظار 15 دقيقة

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

في هذه الصفحة