fix: Improve email verification logic by prioritizing MX record checks and clarifying domain existence validation
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user