MX रिकॉर्ड वैलिडेशन: डेवलपर्स के लिए संपूर्ण गाइड

Leo
LeoFounder, BillionVerify

MX रिकॉर्ड वैलिडेशन लागू करें। DNS लुकअप, MX रिकॉर्ड पार्सिंग, प्राथमिकता हैंडलिंग और ईमेल डोमेन सत्यापन की प्रथाएं।

Cover Image for MX रिकॉर्ड वैलिडेशन: डेवलपर्स के लिए संपूर्ण गाइड

आपके द्वारा भेजा गया हर ईमेल सर्वरों के एक सावधानीपूर्वक व्यवस्थित नेटवर्क के माध्यम से यात्रा करता है, और Mail Exchange (MX) रिकॉर्ड वे संकेत हैं जो इस यात्रा का मार्गदर्शन करते हैं। MX रिकॉर्ड को कैसे वैलिडेट करना है, यह समझना किसी भी डेवलपर के लिए एक मौलिक कौशल है जो ईमेल वेरिफिकेशन सिस्टम, संपर्क फॉर्म या ईमेल पते एकत्र करने वाले एप्लिकेशन बना रहे हैं। यह व्यापक गाइड बुनियादी अवधारणाओं से लेकर उन्नत कार्यान्वयन रणनीतियों तक MX रिकॉर्ड वैलिडेशन का अन्वेषण करती है, जो आपको अपने एप्लिकेशनों में मजबूत ईमेल वेरिफिकेशन बनाने का ज्ञान देती है।

MX रिकॉर्ड्स को समझना

Mail Exchange रिकॉर्ड DNS रिकॉर्ड होते हैं जो निर्दिष्ट करते हैं कि किसी डोमेन की ओर से ईमेल स्वीकार करने के लिए कौन से मेल सर्वर जिम्मेदार हैं। जब आप user@example.com को ईमेल भेजते हैं, तो आपके मेल सर्वर को यह जानना आवश्यक है कि इसे कहाँ डिलीवर करना है। MX रिकॉर्ड डोमेन के मेल सर्वरों की ओर इशारा करके यह जानकारी प्रदान करते हैं।

MX रिकॉर्ड्स कैसे काम करते हैं

जब कोई ईमेल भेजा जाता है, तो भेजने वाला मेल सर्वर प्राप्तकर्ता के डोमेन के लिए MX रिकॉर्ड खोजने के लिए DNS लुकअप करता है। यह लुकअप एक या अधिक मेल सर्वर होस्टनेम के साथ प्राथमिकता मान लौटाता है जो वरीयता क्रम को इंगित करते हैं।

gmail.com के लिए एक सामान्य MX रिकॉर्ड लुकअप यह लौटा सकता है:

gmail.com.    MX    5     gmail-smtp-in.l.google.com.
gmail.com.    MX    10    alt1.gmail-smtp-in.l.google.com.
gmail.com.    MX    20    alt2.gmail-smtp-in.l.google.com.
gmail.com.    MX    30    alt3.gmail-smtp-in.l.google.com.
gmail.com.    MX    40    alt4.gmail-smtp-in.l.google.com.

भेजने वाला सर्वर पहले सबसे कम प्राथमिकता वाले सर्वर (इस मामले में, प्राथमिकता 5) पर डिलीवरी का प्रयास करता है। यदि वह सर्वर अनुपलब्ध है, तो यह अगले प्राथमिकता स्तर को आजमाता है, और इसी तरह। यह अतिरेक व्यक्तिगत सर्वर डाउन होने पर भी ईमेल डिलीवरी सुनिश्चित करता है।

MX रिकॉर्ड घटक

प्रत्येक MX रिकॉर्ड में दो आवश्यक जानकारियां होती हैं:

प्राथमिकता (वरीयता)

एक संख्यात्मक मान जो क्रम को दर्शाता है जिसमें मेल सर्वरों को आजमाया जाना चाहिए। कम संख्या उच्च प्राथमिकता को इंगित करती है। समान प्राथमिकता वाले सर्वर यादृच्छिक क्रम में आजमाए जाते हैं, जो लोड बैलेंसिंग प्रदान करता है।

मेल सर्वर होस्टनेम

मेल सर्वर का पूर्ण योग्य डोमेन नाम (FQDN) जो डोमेन के लिए ईमेल संभालता है। इस होस्टनेम को A या AAAA रिकॉर्ड के माध्यम से एक IP पते में रिज़ॉल्व होना चाहिए।

MX रिकॉर्ड्स ईमेल वेरिफिकेशन के लिए क्यों महत्वपूर्ण हैं

MX रिकॉर्ड वैलिडेशन ईमेल वेरिफिकेशन प्रक्रिया में एक महत्वपूर्ण चेकपॉइंट के रूप में कार्य करता है:

डोमेन अस्तित्व की पुष्टि

यदि किसी डोमेन में कोई MX रिकॉर्ड नहीं है, तो यह आमतौर पर ईमेल प्राप्त नहीं कर सकता है। कुछ डोमेन में A रिकॉर्ड फॉलबैक हो सकता है, लेकिन MX रिकॉर्ड की अनुपस्थिति अक्सर एक मजबूत संकेतक होती है कि डोमेन ईमेल के लिए कॉन्फ़िगर नहीं है।

इन्फ्रास्ट्रक्चर सत्यापन

वैध MX रिकॉर्ड जो काम करने वाले मेल सर्वरों में रिज़ॉल्व होते हैं, यह संकेत देते हैं कि डोमेन में ईमेल इन्फ्रास्ट्रक्चर है। यह किसी विशिष्ट पते के अस्तित्व की गारंटी नहीं देता है, लेकिन यह पुष्टि करता है कि डोमेन ईमेल प्राप्त कर सकता है।

स्पैम और धोखाधड़ी का पता लगाना

वैध व्यवसाय उचित MX रिकॉर्ड बनाए रखते हैं। स्पैम या धोखाधड़ी के लिए उपयोग किए जाने वाले संदिग्ध डोमेन में अक्सर गलत कॉन्फ़िगर किए गए या गायब MX रिकॉर्ड होते हैं।

प्रदर्शन अनुकूलन

SMTP सत्यापन का प्रयास करने से पहले MX रिकॉर्ड की जांच करने से उन डोमेन से कनेक्ट करने में बर्बाद होने वाले समय से बचा जाता है जो ईमेल प्राप्त नहीं कर सकते हैं।

MX रिकॉर्ड लुकअप लागू करना

आइए विभिन्न प्रोग्रामिंग वातावरणों में MX रिकॉर्ड वैलिडेशन को लागू करने का अन्वेषण करें।

Node.js कार्यान्वयन

Node.js dns मॉड्यूल के माध्यम से अंतर्निहित DNS रिज़ॉल्यूशन प्रदान करता है:

const dns = require('dns').promises;

async function getMxRecords(domain) {
  try {
    const records = await dns.resolveMx(domain);

    // Sort by priority (lowest first)
    records.sort((a, b) => a.priority - b.priority);

    return {
      success: true,
      domain,
      records: records.map(r => ({
        exchange: r.exchange,
        priority: r.priority
      }))
    };
  } catch (error) {
    return {
      success: false,
      domain,
      error: error.code,
      message: getMxErrorMessage(error.code)
    };
  }
}

function getMxErrorMessage(code) {
  const messages = {
    'ENODATA': 'No MX records found for this domain',
    'ENOTFOUND': 'Domain does not exist',
    'ETIMEOUT': 'DNS lookup timed out',
    'ESERVFAIL': 'DNS server failed to respond'
  };
  return messages[code] || 'Unknown DNS error';
}

// Usage
const result = await getMxRecords('gmail.com');
console.log(result);

Python कार्यान्वयन

Python का dnspython लाइब्रेरी से dns.resolver मॉड्यूल व्यापक DNS लुकअप क्षमताएं प्रदान करता है:

import dns.resolver
import dns.exception

def get_mx_records(domain):
    try:
        answers = dns.resolver.resolve(domain, 'MX')

        records = []
        for rdata in answers:
            records.append({
                'exchange': str(rdata.exchange).rstrip('.'),
                'priority': rdata.preference
            })

        # Sort by priority
        records.sort(key=lambda x: x['priority'])

        return {
            'success': True,
            'domain': domain,
            'records': records
        }

    except dns.resolver.NXDOMAIN:
        return {
            'success': False,
            'domain': domain,
            'error': 'NXDOMAIN',
            'message': 'Domain does not exist'
        }

    except dns.resolver.NoAnswer:
        return {
            'success': False,
            'domain': domain,
            'error': 'NoAnswer',
            'message': 'No MX records found for this domain'
        }

    except dns.exception.Timeout:
        return {
            'success': False,
            'domain': domain,
            'error': 'Timeout',
            'message': 'DNS lookup timed out'
        }

# Usage
result = get_mx_records('gmail.com')
print(result)

Go कार्यान्वयन

Go का net पैकेज सीधे DNS लुकअप फ़ंक्शन प्रदान करता है:

package main

import (
    "fmt"
    "net"
    "sort"
)

type MxResult struct {
    Success bool
    Domain  string
    Records []MxRecord
    Error   string
}

type MxRecord struct {
    Exchange string
    Priority uint16
}

func getMxRecords(domain string) MxResult {
    records, err := net.LookupMX(domain)

    if err != nil {
        return MxResult{
            Success: false,
            Domain:  domain,
            Error:   err.Error(),
        }
    }

    if len(records) == 0 {
        return MxResult{
            Success: false,
            Domain:  domain,
            Error:   "No MX records found",
        }
    }

    // Sort by priority
    sort.Slice(records, func(i, j int) bool {
        return records[i].Pref < records[j].Pref
    })

    result := MxResult{
        Success: true,
        Domain:  domain,
        Records: make([]MxRecord, len(records)),
    }

    for i, r := range records {
        result.Records[i] = MxRecord{
            Exchange: r.Host,
            Priority: r.Pref,
        }
    }

    return result
}

func main() {
    result := getMxRecords("gmail.com")
    fmt.Printf("%+v\n", result)
}

उन्नत MX वैलिडेशन तकनीकें

मूल MX लुकअप पुष्टि करते हैं कि रिकॉर्ड मौजूद हैं, लेकिन व्यापक ईमेल वैलिडेशन के लिए गहरे विश्लेषण की आवश्यकता होती है।

मेल सर्वर कनेक्टिविटी को वैलिडेट करना

MX रिकॉर्ड होस्टनेम की ओर इशारा करते हैं जो IP पतों में रिज़ॉल्व होने चाहिए। सत्यापित करें कि मेल सर्वर वास्तव में पहुंच योग्य हैं:

const dns = require('dns').promises;
const net = require('net');

async function validateMxConnectivity(domain) {
  // Get MX records
  const mxResult = await getMxRecords(domain);

  if (!mxResult.success) {
    return mxResult;
  }

  // Validate each mail server
  const validatedRecords = [];

  for (const record of mxResult.records) {
    const validation = await validateMailServer(record.exchange);
    validatedRecords.push({
      ...record,
      ...validation
    });
  }

  return {
    success: true,
    domain,
    records: validatedRecords,
    hasReachableServer: validatedRecords.some(r => r.reachable)
  };
}

async function validateMailServer(hostname) {
  try {
    // Resolve hostname to IP
    const addresses = await dns.resolve4(hostname);

    if (addresses.length === 0) {
      return { reachable: false, error: 'No A record' };
    }

    // Test connection to port 25
    const connected = await testConnection(addresses[0], 25);

    return {
      reachable: connected,
      ip: addresses[0],
      error: connected ? null : 'Connection refused'
    };
  } catch (error) {
    return {
      reachable: false,
      error: error.message
    };
  }
}

function testConnection(host, port, timeout = 5000) {
  return new Promise((resolve) => {
    const socket = new net.Socket();

    socket.setTimeout(timeout);

    socket.on('connect', () => {
      socket.destroy();
      resolve(true);
    });

    socket.on('timeout', () => {
      socket.destroy();
      resolve(false);
    });

    socket.on('error', () => {
      resolve(false);
    });

    socket.connect(port, host);
  });
}

A रिकॉर्ड फॉलबैक को संभालना

जब कोई MX रिकॉर्ड मौजूद नहीं होता है, तो ईमेल मानक (RFC 5321) निर्दिष्ट करते हैं कि डोमेन के A रिकॉर्ड को फॉलबैक के रूप में उपयोग किया जाना चाहिए। अपनी वैलिडेशन में इस फॉलबैक को लागू करें:

async function getMailServers(domain) {
  // Try MX records first
  try {
    const mxRecords = await dns.resolveMx(domain);

    if (mxRecords.length > 0) {
      return {
        type: 'MX',
        servers: mxRecords.sort((a, b) => a.priority - b.priority)
      };
    }
  } catch (error) {
    if (error.code !== 'ENODATA') {
      throw error;
    }
  }

  // Fallback to A record
  try {
    const aRecords = await dns.resolve4(domain);

    if (aRecords.length > 0) {
      return {
        type: 'A_FALLBACK',
        servers: [{ exchange: domain, priority: 0 }],
        warning: 'Using A record fallback - no MX records found'
      };
    }
  } catch (error) {
    if (error.code !== 'ENODATA') {
      throw error;
    }
  }

  return {
    type: 'NONE',
    servers: [],
    error: 'No mail servers found for domain'
  };
}

Null MX रिकॉर्ड्स का पता लगाना

RFC 7505 "null MX" रिकॉर्ड्स को परिभाषित करता है जो स्पष्ट रूप से संकेत देते हैं कि एक डोमेन ईमेल स्वीकार नहीं करता है। इन रिकॉर्ड्स में प्राथमिकता 0 और एक खाली होस्टनेम (".") के साथ एक एकल MX प्रविष्टि होती है:

function hasNullMx(mxRecords) {
  if (mxRecords.length === 1) {
    const record = mxRecords[0];
    if (record.priority === 0 &&
        (record.exchange === '.' || record.exchange === '')) {
      return true;
    }
  }
  return false;
}

async function validateDomainMx(domain) {
  const mxResult = await getMxRecords(domain);

  if (!mxResult.success) {
    return mxResult;
  }

  if (hasNullMx(mxResult.records)) {
    return {
      success: false,
      domain,
      error: 'NULL_MX',
      message: 'Domain explicitly does not accept email'
    };
  }

  return mxResult;
}

MX लुकअप को कैशिंग करना

DNS लुकअप हर सत्यापन में विलंबता जोड़ते हैं। प्रदर्शन को बेहतर बनाने के लिए कैशिंग लागू करें:

class MxCache {
  constructor(ttlMs = 3600000) { // 1 hour default TTL
    this.cache = new Map();
    this.ttl = ttlMs;
  }

  get(domain) {
    const entry = this.cache.get(domain.toLowerCase());

    if (!entry) return null;

    if (Date.now() > entry.expiry) {
      this.cache.delete(domain.toLowerCase());
      return null;
    }

    return entry.data;
  }

  set(domain, data) {
    this.cache.set(domain.toLowerCase(), {
      data,
      expiry: Date.now() + this.ttl
    });
  }

  // Respect DNS TTL values when available
  setWithTtl(domain, data, ttlSeconds) {
    const ttlMs = Math.min(ttlSeconds * 1000, this.ttl);
    this.cache.set(domain.toLowerCase(), {
      data,
      expiry: Date.now() + ttlMs
    });
  }
}

const mxCache = new MxCache();

async function getMxRecordsCached(domain) {
  const cached = mxCache.get(domain);

  if (cached) {
    return { ...cached, fromCache: true };
  }

  const result = await getMxRecords(domain);

  if (result.success) {
    mxCache.set(domain, result);
  }

  return { ...result, fromCache: false };
}

सामान्य MX रिकॉर्ड पैटर्न

सामान्य MX कॉन्फ़िगरेशन को समझना आपको वैलिडेशन परिणामों की व्याख्या करने और संभावित समस्याओं की पहचान करने में मदद करता है।

प्रमुख ईमेल प्रदाता

प्रमुख प्रदाताओं के लिए MX पैटर्न को पहचानने से मुफ्त ईमेल पतों की पहचान करने में मदद मिल सकती है:

const knownProviders = {
  'google': [
    'gmail-smtp-in.l.google.com',
    'googlemail-smtp-in.l.google.com',
    'aspmx.l.google.com'
  ],
  'microsoft': [
    'outlook-com.olc.protection.outlook.com',
    'mail.protection.outlook.com'
  ],
  'yahoo': [
    'mta5.am0.yahoodns.net',
    'mta6.am0.yahoodns.net',
    'mta7.am0.yahoodns.net'
  ],
  'protonmail': [
    'mail.protonmail.ch',
    'mailsec.protonmail.ch'
  ]
};

function identifyEmailProvider(mxRecords) {
  const exchanges = mxRecords.map(r => r.exchange.toLowerCase());

  for (const [provider, patterns] of Object.entries(knownProviders)) {
    for (const pattern of patterns) {
      if (exchanges.some(ex => ex.includes(pattern.toLowerCase()))) {
        return provider;
      }
    }
  }

  return 'unknown';
}

Google Workspace का पता लगाना

Google Workspace (पूर्व में G Suite) डोमेन Google के मेल सर्वर का उपयोग करते हैं लेकिन मुफ्त ईमेल खाते नहीं हैं:

function isGoogleWorkspace(domain, mxRecords) {
  const isGoogleMx = mxRecords.some(r =>
    r.exchange.toLowerCase().includes('google') ||
    r.exchange.toLowerCase().includes('googlemail')
  );

  // Check if domain is not a known Google consumer domain
  const googleConsumerDomains = ['gmail.com', 'googlemail.com'];
  const isConsumerDomain = googleConsumerDomains.includes(domain.toLowerCase());

  return isGoogleMx && !isConsumerDomain;
}

स्व-होस्टेड ईमेल का पता लगाना

जो डोमेन अपनी ईमेल होस्ट करते हैं, उनमें अक्सर सबडोमेन की ओर इशारा करने वाले MX रिकॉर्ड होते हैं:

function isSelfHosted(domain, mxRecords) {
  const domainParts = domain.toLowerCase().split('.');
  const baseDomain = domainParts.slice(-2).join('.');

  return mxRecords.some(r => {
    const exchange = r.exchange.toLowerCase();
    return exchange.includes(baseDomain) &&
           !isKnownProvider(exchange);
  });
}

function isKnownProvider(exchange) {
  const providers = ['google', 'microsoft', 'yahoo', 'outlook', 'protonmail'];
  return providers.some(p => exchange.includes(p));
}

ईमेल वेरिफिकेशन पाइपलाइनों में MX वैलिडेशन

MX वैलिडेशन एक व्यापक ईमेल वेरिफिकेशन प्रक्रिया में एक कदम है। इसकी भूमिका को समझना प्रभावी सत्यापन पाइपलाइनों के निर्माण में मदद करता है।

सत्यापन क्रम

MX वैलिडेशन आमतौर पर सत्यापन पाइपलाइन में जल्दी होता है:

async function verifyEmail(email) {
  // 1. Syntax validation (fastest, no network)
  const syntaxResult = validateEmailSyntax(email);
  if (!syntaxResult.valid) {
    return { valid: false, reason: 'invalid_syntax', details: syntaxResult };
  }

  const domain = email.split('@')[1];

  // 2. MX record validation (fast DNS lookup)
  const mxResult = await validateMxRecords(domain);
  if (!mxResult.valid) {
    return { valid: false, reason: 'no_mx_records', details: mxResult };
  }

  // 3. Additional checks (disposable, role-based, etc.)
  const domainCheck = await checkDomainReputation(domain);
  if (domainCheck.isDisposable) {
    return { valid: true, risky: true, reason: 'disposable_domain' };
  }

  // 4. SMTP verification (slowest, most thorough)
  const smtpResult = await verifySmtp(email, mxResult.records);

  return {
    valid: smtpResult.exists,
    deliverable: smtpResult.deliverable,
    mxRecords: mxResult.records,
    provider: mxResult.provider
  };
}

समानांतर MX लुकअप

कई ईमेल को सत्यापित करते समय, विभिन्न डोमेन के लिए MX लुकअप को समानांतर करें:

async function verifyEmailsBatch(emails) {
  // Group emails by domain
  const emailsByDomain = {};

  for (const email of emails) {
    const domain = email.split('@')[1];
    if (!emailsByDomain[domain]) {
      emailsByDomain[domain] = [];
    }
    emailsByDomain[domain].push(email);
  }

  // Lookup MX records for all domains in parallel
  const domains = Object.keys(emailsByDomain);
  const mxResults = await Promise.all(
    domains.map(domain => getMxRecordsCached(domain))
  );

  // Map results back to domains
  const mxByDomain = {};
  domains.forEach((domain, index) => {
    mxByDomain[domain] = mxResults[index];
  });

  // Process emails with MX data
  const results = [];

  for (const email of emails) {
    const domain = email.split('@')[1];
    const mx = mxByDomain[domain];

    if (!mx.success) {
      results.push({ email, valid: false, reason: 'invalid_domain' });
      continue;
    }

    // Continue with SMTP verification using cached MX data
    const smtpResult = await verifySmtp(email, mx.records);
    results.push({ email, ...smtpResult });
  }

  return results;
}

त्रुटि हैंडलिंग और विशेष मामले

मजबूत MX वैलिडेशन विभिन्न त्रुटि स्थितियों को सुचारू रूप से संभालता है।

DNS टाइमआउट हैंडलिंग

नेटवर्क समस्याएं DNS लुकअप को लटका सकती हैं। टाइमआउट हैंडलिंग लागू करें:

async function getMxRecordsWithTimeout(domain, timeoutMs = 10000) {
  const timeoutPromise = new Promise((_, reject) => {
    setTimeout(() => reject(new Error('DNS_TIMEOUT')), timeoutMs);
  });

  try {
    const result = await Promise.race([
      getMxRecords(domain),
      timeoutPromise
    ]);
    return result;
  } catch (error) {
    if (error.message === 'DNS_TIMEOUT') {
      return {
        success: false,
        domain,
        error: 'TIMEOUT',
        message: 'DNS lookup timed out',
        retryable: true
      };
    }
    throw error;
  }
}

अमान्य डोमेन हैंडलिंग

DNS लुकअप का प्रयास करने से पहले उन डोमेन को संभालें जो वाक्यात्मक रूप से अमान्य हैं:

function isValidDomain(domain) {
  if (!domain || typeof domain !== 'string') {
    return false;
  }

  // Check length
  if (domain.length > 253) {
    return false;
  }

  // Check for valid characters and structure
  const domainRegex = /^(?!-)[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)*\.[A-Za-z]{2,}$/;

  if (!domainRegex.test(domain)) {
    return false;
  }

  // Check each label length
  const labels = domain.split('.');
  for (const label of labels) {
    if (label.length > 63) {
      return false;
    }
  }

  return true;
}

async function validateDomainMxSafe(domain) {
  if (!isValidDomain(domain)) {
    return {
      success: false,
      domain,
      error: 'INVALID_DOMAIN',
      message: 'Domain format is invalid'
    };
  }

  return await getMxRecordsWithTimeout(domain);
}

अस्थायी DNS विफलताओं को संभालना

DNS विफलताएं अस्थायी हो सकती हैं। घातीय बैकऑफ के साथ पुनः प्रयास तर्क लागू करें:

async function getMxRecordsWithRetry(domain, maxRetries = 3) {
  const delays = [1000, 2000, 4000];

  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const result = await getMxRecordsWithTimeout(domain);

    // Don't retry for definitive failures
    if (result.success ||
        result.error === 'NXDOMAIN' ||
        result.error === 'ENOTFOUND') {
      return result;
    }

    // Retry for temporary failures
    if (result.retryable && attempt < maxRetries - 1) {
      await sleep(delays[attempt]);
      continue;
    }

    return result;
  }
}

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

सुरक्षा विचार

MX वैलिडेशन सुरक्षा विचारों को पेश करती है जिन्हें डेवलपर्स को संबोधित करना चाहिए।

DNS स्पूफिंग रोकथाम

मानक DNS क्वेरी एन्क्रिप्ट नहीं होती हैं और स्पूफिंग के लिए असुरक्षित हैं। संवेदनशील अनुप्रयोगों के लिए DNS over HTTPS (DoH) का उपयोग करने पर विचार करें:

const https = require('https');

async function getMxRecordsDoH(domain) {
  const url = `https://cloudflare-dns.com/dns-query?name=${encodeURIComponent(domain)}&type=MX`;

  return new Promise((resolve, reject) => {
    https.get(url, {
      headers: { 'Accept': 'application/dns-json' }
    }, (res) => {
      let data = '';

      res.on('data', chunk => data += chunk);

      res.on('end', () => {
        try {
          const response = JSON.parse(data);

          if (response.Status !== 0) {
            resolve({
              success: false,
              domain,
              error: 'DNS_ERROR',
              status: response.Status
            });
            return;
          }

          const records = (response.Answer || [])
            .filter(a => a.type === 15)
            .map(a => {
              const [priority, exchange] = a.data.split(' ');
              return {
                priority: parseInt(priority),
                exchange: exchange.replace(/\.$/, '')
              };
            })
            .sort((a, b) => a.priority - b.priority);

          resolve({
            success: records.length > 0,
            domain,
            records
          });
        } catch (error) {
          reject(error);
        }
      });
    }).on('error', reject);
  });
}

DNS क्वेरी को दर सीमित करना

DNS क्वेरी की दर को सीमित करके दुरुपयोग को रोकें:

class DnsRateLimiter {
  constructor(maxQueriesPerSecond = 100) {
    this.tokens = maxQueriesPerSecond;
    this.maxTokens = maxQueriesPerSecond;
    this.lastRefill = Date.now();
  }

  async acquire() {
    this.refillTokens();

    if (this.tokens > 0) {
      this.tokens--;
      return true;
    }

    // Wait for token availability
    await sleep(1000 / this.maxTokens);
    return this.acquire();
  }

  refillTokens() {
    const now = Date.now();
    const elapsed = now - this.lastRefill;
    const tokensToAdd = (elapsed / 1000) * this.maxTokens;

    this.tokens = Math.min(this.maxTokens, this.tokens + tokensToAdd);
    this.lastRefill = now;
  }
}

const dnsLimiter = new DnsRateLimiter(50);

async function getMxRecordsRateLimited(domain) {
  await dnsLimiter.acquire();
  return getMxRecords(domain);
}

MX वैलिडेशन के लिए BillionVerify का उपयोग करना

जबकि MX वैलिडेशन को स्वयं लागू करना शैक्षिक मूल्य प्रदान करता है, BillionVerify जैसी पेशेवर ईमेल वेरिफिकेशन सेवाएं व्यापक ईमेल वेरिफिकेशन के भाग के रूप में MX वैलिडेशन को संभालती हैं।

ईमेल वेरिफिकेशन API का उपयोग करने के फायदे

व्यापक जांच

BillionVerify का ईमेल वेरिफिकेशन API एक ही API कॉल में सिंटैक्स जांच, SMTP सत्यापन, डिस्पोजेबल ईमेल पहचान और बहुत कुछ के साथ MX वैलिडेशन को जोड़ता है। यह कई सत्यापन प्रणालियों को बनाए रखने की आवश्यकता को समाप्त करता है।

अनुकूलित इन्फ्रास्ट्रक्चर

पेशेवर सेवाएं विश्व स्तर पर वितरित DNS रिज़ॉल्वर बनाए रखती हैं, बड़े पैमाने पर कैशिंग को संभालती हैं, और लाखों सत्यापनों में प्रदर्शन के लिए अनुकूलित करती हैं।

निरंतर अपडेट

मेल सर्वर कॉन्फ़िगरेशन लगातार बदलते रहते हैं। ईमेल वेरिफिकेशन सेवाएं ज्ञात प्रदाताओं, डिस्पोजेबल डोमेन और मेल सर्वर पैटर्न के अपने डेटाबेस को लगातार अपडेट करती हैं।

API एकीकरण उदाहरण

async function verifyEmailWithBillionVerify(email) {
  const response = await fetch('https://api.billionverify.com/v1/verify', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.BV_API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ email })
  });

  const result = await response.json();

  // MX information is included in the response
  console.log('MX Valid:', result.mx_found);
  console.log('Domain Valid:', result.domain_valid);
  console.log('Is Deliverable:', result.is_deliverable);

  return result;
}

निष्कर्ष

MX रिकॉर्ड वैलिडेशन ईमेल वेरिफिकेशन का एक मूलभूत घटक है जो अधिक संसाधन-गहन जांच का प्रयास करने से पहले पुष्टि करता है कि एक डोमेन ईमेल प्राप्त कर सकता है। उचित MX वैलिडेशन लागू करके, आप जल्दी से अमान्य डोमेन को फ़िल्टर कर सकते हैं, सत्यापन प्रदर्शन को अनुकूलित कर सकते हैं, और अधिक विश्वसनीय ईमेल-हैंडलिंग एप्लिकेशन बना सकते हैं।

MX रिकॉर्ड वैलिडेशन के लिए मुख्य निष्कर्ष:

  1. हमेशा MX रिकॉर्ड्स की जांच करें SMTP सत्यापन का प्रयास करने से पहले समय और संसाधनों को बचाने के लिए
  2. A रिकॉर्ड फॉलबैक को संभालें बिना MX रिकॉर्ड वाले डोमेन के लिए RFC मानकों के अनुसार
  3. कैशिंग लागू करें बार-बार सत्यापनों के लिए DNS लुकअप ओवरहेड को कम करने के लिए
  4. सामान्य पैटर्न को पहचानें ईमेल प्रदाताओं और संभावित जोखिमों की पहचान करने के लिए
  5. त्रुटियों को सुचारू रूप से संभालें टाइमआउट, पुनः प्रयास और उचित त्रुटि संदेशों के साथ

चाहे आप एक कस्टम ईमेल वेरिफिकेशन सिस्टम बना रहे हों या BillionVerify जैसी सेवा के साथ एकीकृत कर रहे हों, MX रिकॉर्ड को समझना आपको अपने एप्लिकेशनों में बेहतर ईमेल हैंडलिंग बनाने में मदद करता है। आज ही MX वैलिडेशन लागू करना शुरू करें और व्यापक ईमेल वेरिफिकेशन की ओर पहला कदम उठाएं।

Instantly या Smartlead का उपयोग करने वाली टीमें हर अभियान से पहले BillionVerify से सूचियाँ साफ करके डिलीवरेबिलिटी में उल्लेखनीय सुधार करती हैं।

वेरिफिकेशन प्रोवाइडर चुनने से पहले सटीकता और गति के मामले में BillionVerify की तुलना ZeroBounce से करें।

Leo
LeoFounder, BillionVerify
ईमेल सत्यापन अंतर्दृष्टि

आज ही सत्यापन शुरू करें

आज ही BillionVerify के साथ ईमेल सत्यापन शुरू करें। साइन अप करने पर 100 मुफ्त क्रेडिट प्राप्त करें - किसी क्रेडिट कार्ड की आवश्यकता नहीं। हजारों व्यवसायों में शामिल हों जो सटीक ईमेल सत्यापन के साथ अपने ईमेल मार्केटिंग ROI में सुधार कर रहे हैं।

किसी क्रेडिट कार्ड की आवश्यकता नहीं · प्रतिदिन 100+ मुफ्त क्रेडिट · 30 सेकंड में शुरू करें

99.9%
सटीकता
Real-time
API गति
$0.00014
प्रति ईमेल
100/day
हमेशा मुफ़्त