fix: Improve email verification logic by prioritizing MX record checks and clarifying domain existence validation

This commit is contained in:
Dries Augustyns
2026-01-12 18:49:30 +01:00
parent 93165644af
commit 26800a8553
@@ -42,8 +42,8 @@ export class EmailVerificationService {
/** /**
* Verify an email address * Verify an email address
* - Checks if domain exists (DNS A/AAAA records) * - Checks for MX records (required for receiving email)
* - Checks for MX records * - Checks if domain exists (DNS A/AAAA records) - informational only
* - Detects disposable email addresses * - Detects disposable email addresses
* - Detects forwarding/alias email addresses * - Detects forwarding/alias email addresses
* - Suggests corrections for common typos * - Suggests corrections for common typos
@@ -88,24 +88,8 @@ export class EmailVerificationService {
result.isTypo = true; result.isTypo = true;
} }
// Check if domain exists (has any DNS records) // Check MX records first - this is what matters for email delivery
try { // A domain can receive email with only MX records, no A/AAAA records needed
await dns.resolve(domain, 'A');
result.domainExists = true;
} catch {
// Try AAAA records if A records fail
try {
await dns.resolve(domain, 'AAAA');
result.domainExists = true;
} catch {
result.domainExists = false;
result.valid = false;
result.reasons.push('Domain does not exist');
}
}
// Check MX records (only if domain exists)
if (result.domainExists) {
try { try {
const mxRecords = await dns.resolveMx(domain); const mxRecords = await dns.resolveMx(domain);
result.hasMxRecords = mxRecords && mxRecords.length > 0; result.hasMxRecords = mxRecords && mxRecords.length > 0;
@@ -118,6 +102,21 @@ export class EmailVerificationService {
result.valid = false; result.valid = false;
result.reasons.push('No MX records found for domain'); result.reasons.push('No MX records found for domain');
} }
// Check if domain exists (has A/AAAA records) - informational only
// This doesn't affect validity since email delivery only requires MX records
try {
await dns.resolve(domain, 'A');
result.domainExists = true;
} catch {
// Try AAAA records if A records fail
try {
await dns.resolve(domain, 'AAAA');
result.domainExists = true;
} catch {
// Domain doesn't have A/AAAA records, but this is OK if it has MX records
result.domainExists = false;
}
} }
// If no issues were found, add a success reason // If no issues were found, add a success reason