MX Records and Email Configuration: Master Email Routing and Deliverability
A practical Fusebox guide to mx records and email configuration.
MX Records and Email Configuration: Master Email Routing and Deliverability
Published: January 2024
Reading time: 9 minutes
MX (Mail Exchange) records are the backbone of email delivery. They tell the internet where to send emails for your domain. Get them wrong, and emails disappear. Here's everything developers need to know about MX records, email routing, and deliverability.
What Are MX Records?
MX records specify which mail servers handle email for a domain. When someone sends email to user@example.com:
- Sender's server queries DNS for example.com MX records
- DNS returns mail servers with priority numbers
- Email routes to highest priority (lowest number) server
- Backup servers take over if primary fails
Without proper MX records, your domain can't receive email.
Understanding MX Record Structure
Basic MX Record Format
; MX record format: priority hostname
example.com. IN MX 10 mail.example.com.
example.com. IN MX 20 backup-mail.example.com.
example.com. IN MX 30 tertiary-mail.example.com.
Priority System Explained
// MX Priority visualization
function explainMXPriority() {
console.log('๐ง MX Record Priority System\n');
const mxRecords = [
{ priority: 10, server: 'mail1.example.com', role: 'Primary', load: '70%' },
{ priority: 10, server: 'mail2.example.com', role: 'Primary', load: '30%' },
{ priority: 20, server: 'backup.example.com', role: 'Backup', load: '0%' },
{ priority: 30, server: 'emergency.example.com', role: 'Emergency', load: '0%' }
];
console.log('Current MX Configuration:');
mxRecords.forEach(mx => {
const bar = 'โ'.repeat(Math.floor(mx.load.parseInt / 5));
console.log(`Priority ${mx.priority}: ${mx.server.padEnd(25)} [${mx.role}] ${bar} ${mx.load}`);
});
console.log('\n๐ How it works:');
console.log('1. Lower priority number = Higher preference');
console.log('2. Same priority = Load balancing (random selection)');
console.log('3. Higher priority numbers = Failover only');
console.log('4. No MX records = A record fallback (unreliable)');
// Common configurations
console.log('\n๐ง Common Configurations:\n');
const configs = {
'Single Server': [
{ priority: 10, server: 'mail.example.com' }
],
'Active-Passive': [
{ priority: 10, server: 'primary.example.com' },
{ priority: 20, server: 'backup.example.com' }
],
'Load Balanced': [
{ priority: 10, server: 'mail1.example.com' },
{ priority: 10, server: 'mail2.example.com' }
],
'Enterprise': [
{ priority: 10, server: 'mail1.example.com' },
{ priority: 10, server: 'mail2.example.com' },
{ priority: 20, server: 'backup1.example.com' },
{ priority: 20, server: 'backup2.example.com' },
{ priority: 50, server: 'disaster-recovery.example.com' }
]
};
Object.entries(configs).forEach(([name, records]) => {
console.log(`${name}:`);
records.forEach(r => console.log(` ${r.priority} ${r.server}`));
console.log('');
});
}
explainMXPriority();
Checking MX Records
1. MX Record Analyzer
// Comprehensive MX record analysis
async function analyzeMXRecords(domain) {
console.log(`\n๐ง MX Record Analysis for ${domain}\n`);
// Simulated MX query results
const mxRecords = [
{ priority: 1, exchange: 'aspmx.l.google.com', ip: '142.250.153.26', provider: 'Google' },
{ priority: 5, exchange: 'alt1.aspmx.l.google.com', ip: '142.250.153.27', provider: 'Google' },
{ priority: 5, exchange: 'alt2.aspmx.l.google.com', ip: '172.217.197.27', provider: 'Google' },
{ priority: 10, exchange: 'alt3.aspmx.l.google.com', ip: '172.253.113.27', provider: 'Google' },
{ priority: 10, exchange: 'alt4.aspmx.l.google.com', ip: '172.253.112.26', provider: 'Google' }
];
console.log('MX Records found:');
console.log('Priority | Mail Server | IP Address | Provider');
console.log('---------|--------------------------------|-----------------|----------');
mxRecords.forEach(mx => {
console.log(
`${mx.priority.toString().padEnd(8)} | ${mx.exchange.padEnd(30)} | ${mx.ip.padEnd(15)} | ${mx.provider}`
);
});
// Analyze configuration
console.log('\n๐ Configuration Analysis:');
// Provider detection
const providers = [...new Set(mxRecords.map(mx => mx.provider))];
console.log(`Email Provider: ${providers.join(', ')}`);
// Redundancy check
const uniquePriorities = [...new Set(mxRecords.map(mx => mx.priority))];
console.log(`Redundancy Levels: ${uniquePriorities.length}`);
if (mxRecords.filter(mx => mx.priority === mxRecords[0].priority).length > 1) {
console.log('Load Balancing: โ
Enabled (multiple servers with same priority)');
} else {
console.log('Load Balancing: โ Disabled (single server per priority)');
}
// Geographic distribution
const geoDistribution = checkGeographicDistribution(mxRecords);
console.log(`Geographic Distribution: ${geoDistribution}`);
// Security features
console.log('\n๐ Security Features:');
await checkEmailSecurity(domain);
return mxRecords;
}
function checkGeographicDistribution(mxRecords) {
// Check IP ranges for geographic diversity
const ipPrefixes = mxRecords.map(mx => mx.ip.split('.')[0]);
const uniquePrefixes = [...new Set(ipPrefixes)];
if (uniquePrefixes.length > 2) {
return 'โ
Good (multiple regions)';
} else if (uniquePrefixes.length > 1) {
return '๐ก Fair (limited regions)';
} else {
return 'โ Poor (single region)';
}
}
async function checkEmailSecurity(domain) {
// Check for email security records
const securityChecks = {
SPF: await checkSPF(domain),
DKIM: await checkDKIM(domain),
DMARC: await checkDMARC(domain),
MTA_STS: await checkMTASTS(domain),
BIMI: await checkBIMI(domain)
};
Object.entries(securityChecks).forEach(([feature, status]) => {
console.log(`${status ? 'โ
' : 'โ'} ${feature}`);
});
}
// Simulate security checks
async function checkSPF(domain) { return true; }
async function checkDKIM(domain) { return true; }
async function checkDMARC(domain) { return true; }
async function checkMTASTS(domain) { return false; }
async function checkBIMI(domain) { return false; }
// Run analysis
analyzeMXRecords('example.com');
2. Email Routing Path Tracer
// Trace email routing path
function traceEmailRoute(fromEmail, toEmail) {
console.log(`\n๐ฎ Email Routing Path Trace\n`);
console.log(`From: ${fromEmail}`);
console.log(`To: ${toEmail}\n`);
const toDomain = toEmail.split('@')[1];
const steps = [];
// Step 1: Sender's mail server
steps.push({
step: 1,
action: 'Email composed',
location: 'Sender\'s email client',
details: 'User hits send'
});
// Step 2: Outgoing mail server
steps.push({
step: 2,
action: 'SMTP submission',
location: 'Sender\'s mail server',
details: 'Authenticated, queued for delivery'
});
// Step 3: DNS lookup
steps.push({
step: 3,
action: 'MX lookup',
location: 'DNS resolver',
details: `Query MX records for ${toDomain}`
});
// Step 4: Connection attempt
steps.push({
step: 4,
action: 'SMTP connection',
location: 'Primary MX server',
details: 'Connect to lowest priority MX'
});
// Step 5: Security checks
steps.push({
step: 5,
action: 'Security validation',
location: 'Recipient\'s mail server',
details: 'SPF, DKIM, DMARC checks'
});
// Step 6: Delivery
steps.push({
step: 6,
action: 'Final delivery',
location: 'Recipient\'s mailbox',
details: 'Email delivered to inbox'
});
console.log('Routing Steps:');
steps.forEach(step => {
console.log(`\n${step.step}. ${step.action}`);
console.log(` ๐ ${step.location}`);
console.log(` โน๏ธ ${step.details}`);
});
// Common failure points
console.log('\nโ ๏ธ Common Failure Points:');
console.log('โข Step 3: No MX records found โ Email bounces');
console.log('โข Step 4: All MX servers down โ Retry queue');
console.log('โข Step 5: SPF/DKIM fail โ Spam or rejection');
console.log('โข Step 6: Mailbox full โ Bounce message');
}
traceEmailRoute('sender@company.com', 'recipient@example.com');
Common Email Providers MX Records
Popular Email Service Configurations
// Reference MX configurations for popular providers
function commonEmailProviders() {
console.log('\n๐ง Common Email Provider MX Configurations\n');
const providers = {
'Google Workspace (Gmail)': {
mx: [
{ priority: 1, server: 'aspmx.l.google.com' },
{ priority: 5, server: 'alt1.aspmx.l.google.com' },
{ priority: 5, server: 'alt2.aspmx.l.google.com' },
{ priority: 10, server: 'alt3.aspmx.l.google.com' },
{ priority: 10, server: 'alt4.aspmx.l.google.com' }
],
spf: 'v=spf1 include:_spf.google.com ~all',
features: ['99.9% uptime', 'Spam filtering', 'DKIM signing']
},
'Microsoft 365 (Outlook)': {
mx: [
{ priority: 0, server: 'example-com.mail.protection.outlook.com' }
],
spf: 'v=spf1 include:spf.protection.outlook.com -all',
features: ['Exchange integration', 'Advanced threat protection', 'DLP']
},
'Zoho Mail': {
mx: [
{ priority: 10, server: 'mx.zoho.com' },
{ priority: 20, server: 'mx2.zoho.com' },
{ priority: 50, server: 'mx3.zoho.com' }
],
spf: 'v=spf1 include:zoho.com ~all',
features: ['Privacy focused', 'Ad-free', 'Custom domains']
},
'ProtonMail': {
mx: [
{ priority: 10, server: 'mail.protonmail.ch' },
{ priority: 20, server: 'mailsec.protonmail.ch' }
],
spf: 'v=spf1 include:_spf.protonmail.ch ~all',
features: ['End-to-end encryption', 'Swiss privacy', 'Tor access']
}
};
Object.entries(providers).forEach(([name, config]) => {
console.log(`๐ฎ ${name}`);
console.log('\nMX Records:');
config.mx.forEach(mx => {
console.log(` ${mx.priority} ${mx.server}`);
});
console.log(`\nSPF Record:\n ${config.spf}`);
console.log('\nKey Features:');
config.features.forEach(feature => console.log(` โข ${feature}`));
console.log('\n' + 'โ'.repeat(60) + '\n');
});
}
commonEmailProviders();
Email Deliverability Testing
1. MX Record Health Check
// Comprehensive MX record health check
async function checkMXHealth(domain) {
console.log(`\n๐ฅ MX Record Health Check for ${domain}\n`);
const tests = [
{
name: 'MX Records Exist',
check: async () => {
// Check if MX records exist
return { pass: true, message: '5 MX records found' };
}
},
{
name: 'MX Servers Responding',
check: async () => {
// Test SMTP connection to each MX
return { pass: true, message: 'All servers responding on port 25' };
}
},
{
name: 'Priority Configuration',
check: async () => {
// Verify priority setup
return { pass: true, message: 'Proper failover configuration' };
}
},
{
name: 'Reverse DNS (PTR)',
check: async () => {
// Check PTR records for mail servers
return { pass: true, message: 'All mail servers have valid PTR' };
}
},
{
name: 'Blacklist Check',
check: async () => {
// Check against major blacklists
return { pass: true, message: 'Not found on any blacklists' };
}
},
{
name: 'SSL/TLS Support',
check: async () => {
// Test STARTTLS support
return { pass: true, message: 'TLS 1.2+ supported' };
}
},
{
name: 'SPF Record Valid',
check: async () => {
// Validate SPF syntax and configuration
return { pass: true, message: 'SPF record properly configured' };
}
},
{
name: 'DKIM Configured',
check: async () => {
// Check for DKIM selector
return { pass: false, message: 'DKIM selector not found' };
}
},
{
name: 'DMARC Policy',
check: async () => {
// Check DMARC record
return { pass: true, message: 'DMARC policy: p=quarantine' };
}
}
];
console.log('Running health checks...\n');
let passed = 0;
for (const test of tests) {
const result = await test.check();
const icon = result.pass ? 'โ
' : 'โ';
console.log(`${icon} ${test.name.padEnd(25)} ${result.message}`);
if (result.pass) passed++;
}
const score = (passed / tests.length * 100).toFixed(0);
console.log(`\n๐ Health Score: ${score}%`);
if (score === 100) {
console.log('๐ Perfect email configuration!');
} else if (score >= 80) {
console.log('๐ Good configuration with minor improvements needed');
} else if (score >= 60) {
console.log('โ ๏ธ Several issues affecting deliverability');
} else {
console.log('โ Critical issues - emails may not deliver reliably');
}
}
checkMXHealth('example.com');
2. Email Authentication Chain
// Verify complete email authentication chain
function verifyEmailAuthentication(domain) {
console.log(`\n๐ Email Authentication Chain for ${domain}\n`);
// SPF Check
console.log('1๏ธโฃ SPF (Sender Policy Framework)');
console.log(' Record: v=spf1 include:_spf.google.com ~all');
console.log(' โ
Syntax valid');
console.log(' โ
Includes legitimate senders');
console.log(' โ ๏ธ Soft fail (~all) - consider hard fail (-all)');
// DKIM Check
console.log('\n2๏ธโฃ DKIM (DomainKeys Identified Mail)');
console.log(' Selector: google._domainkey');
console.log(' โ
Public key found');
console.log(' โ
Key length: 2048 bits');
console.log(' โ
Valid signature algorithm');
// DMARC Check
console.log('\n3๏ธโฃ DMARC (Domain-based Message Authentication)');
console.log(' Record: v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com');
console.log(' โ
Policy set to quarantine');
console.log(' โ
Aggregate reports configured');
console.log(' โ Forensic reports not configured');
// MTA-STS Check
console.log('\n4๏ธโฃ MTA-STS (Mail Transfer Agent Strict Transport Security)');
console.log(' โ Not configured');
console.log(' Impact: Vulnerable to downgrade attacks');
// BIMI Check
console.log('\n5๏ธโฃ BIMI (Brand Indicators for Message Identification)');
console.log(' โ Not configured');
console.log(' Impact: No brand logo in email clients');
// Overall assessment
console.log('\n๐ Authentication Score: 3/5');
console.log('\n๐ก Recommendations:');
console.log(' 1. Implement MTA-STS for transport security');
console.log(' 2. Add DMARC forensic reporting (ruf)');
console.log(' 3. Consider stricter SPF policy (-all)');
console.log(' 4. Implement BIMI for brand recognition');
}
verifyEmailAuthentication('example.com');
MX Record Migration
1. Email Migration Planning
// Plan email service migration
function planEmailMigration(currentProvider, newProvider) {
console.log('\n๐ Email Migration Plan\n');
console.log(`Current: ${currentProvider} โ New: ${newProvider}\n`);
const migrationSteps = [
{
phase: 'Preparation (1 week before)',
tasks: [
'Audit current email configuration',
'Document all email addresses and aliases',
'Export existing emails if needed',
'Lower MX record TTL to 300 seconds',
'Set up new email service',
'Configure SPF, DKIM, DMARC on new service'
]
},
{
phase: 'Pre-Migration Testing (2 days before)',
tasks: [
'Create test accounts on new service',
'Send test emails to verify delivery',
'Test email clients and mobile apps',
'Configure email forwarding rules',
'Backup MX records and DNS settings'
]
},
{
phase: 'Migration Day',
tasks: [
'Schedule during low email traffic',
'Add new MX records with higher priority',
'Test email flow to both services',
'Gradually lower new MX priority',
'Monitor both old and new servers',
'Remove old MX records after validation'
]
},
{
phase: 'Post-Migration (1 week after)',
tasks: [
'Monitor email delivery logs',
'Check blacklist status',
'Verify all aliases working',
'Update documentation',
'Raise TTL back to normal',
'Decommission old service'
]
}
];
migrationSteps.forEach(phase => {
console.log(`๐ ${phase.phase}`);
phase.tasks.forEach(task => console.log(` โ ${task}`));
console.log('');
});
// Critical considerations
console.log('โ ๏ธ Critical Considerations:');
console.log('โข Email downtime is unacceptable - plan for zero downtime');
console.log('โข Both services may receive email during transition');
console.log('โข Calendar and contact sync may need reconfiguration');
console.log('โข Update all email clients and devices');
console.log('โข Inform users about potential delays');
}
planEmailMigration('Google Workspace', 'Microsoft 365');
2. MX Record Cutover Strategy
// Implement gradual MX record cutover
function mxCutoverStrategy(domain) {
console.log(`\n๐ MX Record Cutover Strategy for ${domain}\n`);
const cutoverPhases = [
{
time: 'T-48 hours',
action: 'Lower TTL',
config: [
{ ttl: 300, priority: 10, server: 'oldmail.example.com' }
]
},
{
time: 'T-0 (Start)',
action: 'Add new MX with lower preference',
config: [
{ ttl: 300, priority: 10, server: 'oldmail.example.com' },
{ ttl: 300, priority: 50, server: 'newmail.example.com' }
]
},
{
time: 'T+2 hours',
action: 'Test new server, adjust priorities',
config: [
{ ttl: 300, priority: 20, server: 'oldmail.example.com' },
{ ttl: 300, priority: 10, server: 'newmail.example.com' }
]
},
{
time: 'T+6 hours',
action: 'Old server as backup only',
config: [
{ ttl: 300, priority: 50, server: 'oldmail.example.com' },
{ ttl: 300, priority: 10, server: 'newmail.example.com' }
]
},
{
time: 'T+24 hours',
action: 'Remove old server',
config: [
{ ttl: 3600, priority: 10, server: 'newmail.example.com' }
]
}
];
console.log('Cutover Timeline:');
cutoverPhases.forEach(phase => {
console.log(`\nโฐ ${phase.time}: ${phase.action}`);
console.log('MX Configuration:');
phase.config.forEach(mx => {
console.log(` TTL:${mx.ttl} Priority:${mx.priority} โ ${mx.server}`);
});
});
console.log('\n๐ Risk Mitigation:');
console.log('โข Both servers receive mail during transition');
console.log('โข Gradual shift minimizes risk');
console.log('โข Easy rollback at any phase');
console.log('โข Monitor delivery to both servers');
}
mxCutoverStrategy('example.com');
Troubleshooting Email Issues
1. Common MX Problems
// Diagnose common MX record issues
function troubleshootMXIssues(domain, symptoms) {
console.log(`\n๐ง MX Record Troubleshooting for ${domain}\n`);
console.log(`Symptoms: ${symptoms}\n`);
const troubleshootingGuide = {
'Emails not arriving': {
checks: [
'Verify MX records exist',
'Check MX server connectivity (port 25)',
'Verify domain spelling in MX records',
'Check for firewall blocking port 25',
'Verify SPF record includes sending servers'
],
commands: [
'nslookup -type=mx example.com',
'telnet mail.example.com 25',
'dig +short example.com MX'
]
},
'Emails delayed': {
checks: [
'Check MX priority values',
'Verify all MX servers responding',
'Look for greylisting on recipient',
'Check sender reputation',
'Monitor queue on sending server'
],
commands: [
'dig example.com MX +short',
'swaks -t test@example.com -f sender@test.com',
'Check mail logs: /var/log/mail.log'
]
},
'Emails going to spam': {
checks: [
'Verify SPF record accuracy',
'Check DKIM signing',
'Review DMARC policy',
'Check IP reputation',
'Verify reverse DNS (PTR) records'
],
commands: [
'dig example.com TXT | grep spf',
'Check blacklists: mxtoolbox.com/blacklists',
'Test email: mail-tester.com'
]
},
'Cannot send emails': {
checks: [
'Verify SMTP authentication',
'Check outbound port 25/587 access',
'Verify sender domain in email client',
'Check mailbox quota',
'Verify email client settings'
],
commands: [
'telnet smtp.example.com 587',
'openssl s_client -connect smtp.example.com:465',
'Check SMTP auth: swaks --auth'
]
}
};
const issue = troubleshootingGuide[symptoms];
if (issue) {
console.log('๐ Diagnostic Steps:');
issue.checks.forEach((check, i) => {
console.log(`${i + 1}. ${check}`);
});
console.log('\n๐ป Useful Commands:');
issue.commands.forEach(cmd => {
console.log(` $ ${cmd}`);
});
}
// Quick diagnostic
console.log('\nโก Quick Diagnostic Commands:\n');
console.log('# Check MX records');
console.log('$ dig +short example.com MX\n');
console.log('# Test email delivery');
console.log('$ swaks -t recipient@example.com -f test@sender.com\n');
console.log('# Check mail server banner');
console.log('$ nc mail.example.com 25');
}
troubleshootMXIssues('example.com', 'Emails going to spam');
2. Email Delivery Path Analysis
// Analyze email delivery path and bottlenecks
function analyzeEmailDeliveryPath(from, to) {
console.log(`\n๐ Email Delivery Path Analysis\n`);
console.log(`From: ${from} โ To: ${to}\n`);
const deliverySteps = [
{ step: 'DNS Lookup', time: '~50ms', potential_issues: 'No MX records, DNS timeout' },
{ step: 'Connection', time: '~100ms', potential_issues: 'Firewall, port blocked' },
{ step: 'SMTP Handshake', time: '~200ms', potential_issues: 'TLS negotiation failure' },
{ step: 'Sender Verification', time: '~500ms', potential_issues: 'SPF fail, IP blacklisted' },
{ step: 'Content Filtering', time: '~1000ms', potential_issues: 'Spam detection, virus scan' },
{ step: 'Delivery', time: '~100ms', potential_issues: 'Mailbox full, user unknown' }
];
let totalTime = 0;
console.log('Step | Time | Potential Issues');
console.log('-------------------|---------|----------------------------------');
deliverySteps.forEach(step => {
const time = parseInt(step.time);
totalTime += time;
console.log(
`${step.step.padEnd(18)} | ${step.time.padEnd(7)} | ${step.potential_issues}`
);
});
console.log(`\nTotal time: ~${totalTime}ms (${(totalTime/1000).toFixed(1)}s)`);
// Bottleneck analysis
console.log('\n๐ Common Bottlenecks:');
console.log('โข Greylisting: Adds 5-15 minute delay on first email');
console.log('โข Large attachments: Increases transfer time significantly');
console.log('โข Spam filtering: Can add 1-5 seconds for complex analysis');
console.log('โข Geographic distance: Adds 50-200ms per hop');
}
analyzeEmailDeliveryPath('sender@company.com', 'recipient@example.com');
Complete MX Configuration Guide
// Comprehensive MX setup and validation
async function completeMXConfigurationGuide(domain, action) {
console.log('๐ง COMPLETE MX CONFIGURATION GUIDE');
console.log('โ'.repeat(50));
console.log(`Domain: ${domain}`);
console.log(`Action: ${action}`);
console.log(`Date: ${new Date().toLocaleDateString()}\n`);
switch(action) {
case 'new-setup':
console.log('๐ NEW EMAIL SETUP CHECKLIST\n');
console.log('1. Choose Email Provider');
console.log(' โ Compare features and pricing');
console.log(' โ Check compliance requirements');
console.log(' โ Verify API availability\n');
console.log('2. Configure MX Records');
console.log(' โ Remove any existing MX records');
console.log(' โ Add provider MX records');
console.log(' โ Set appropriate priorities');
console.log(' โ Use low TTL initially (300s)\n');
console.log('3. Setup Authentication');
console.log(' โ Configure SPF record');
console.log(' โ Enable DKIM signing');
console.log(' โ Create DMARC policy');
console.log(' โ Consider MTA-STS\n');
console.log('4. Test Configuration');
console.log(' โ Send test emails');
console.log(' โ Check spam score');
console.log(' โ Verify mobile access');
console.log(' โ Test attachments');
break;
case 'optimization':
console.log('โก EMAIL OPTIMIZATION CHECKLIST\n');
console.log('Performance:');
console.log(' โ Add multiple MX servers for redundancy');
console.log(' โ Optimize MX priorities for load balancing');
console.log(' โ Enable connection caching');
console.log(' โ Implement greylisting bypass\n');
console.log('Security:');
console.log(' โ Enforce TLS for all connections');
console.log(' โ Implement DANE TLSA records');
console.log(' โ Enable MTA-STS policy');
console.log(' โ Configure BIMI for brand protection\n');
console.log('Deliverability:');
console.log(' โ Monitor blacklist status');
console.log(' โ Maintain sender reputation');
console.log(' โ Implement feedback loops');
console.log(' โ Regular authentication audits');
break;
case 'troubleshooting':
console.log('๐ง TROUBLESHOOTING CHECKLIST\n');
console.log('Receiving Issues:');
console.log(' โ Verify MX records resolve correctly');
console.log(' โ Check port 25 connectivity');
console.log(' โ Verify firewall rules');
console.log(' โ Check mail server logs\n');
console.log('Sending Issues:');
console.log(' โ Verify SMTP authentication');
console.log(' โ Check SPF includes sending IPs');
console.log(' โ Verify DKIM key matches');
console.log(' โ Test port 587/465 connectivity\n');
console.log('Spam Issues:');
console.log(' โ Check blacklist status');
console.log(' โ Verify authentication records');
console.log(' โ Review email content');
console.log(' โ Check sender reputation');
break;
}
console.log('\n๐ Essential Commands Reference:');
console.log('dig example.com MX # Check MX records');
console.log('dig example.com TXT # Check SPF/DKIM/DMARC');
console.log('telnet mail.example.com 25 # Test connectivity');
console.log('swaks -t test@example.com # Test email delivery');
console.log('host -t mx example.com # Alternative MX lookup');
}
// Run the guide
completeMXConfigurationGuide('example.com', 'new-setup');
The Bottom Line
MX records are critical for:
- Business communication - Email must work reliably
- Customer trust - Professional email delivery
- Security - Proper authentication prevents spoofing
- Redundancy - Multiple MX records ensure uptime
- Performance - Optimized routing speeds delivery
Master MX records to ensure bulletproof email infrastructure.
Analyze MX records instantly: Fusebox shows complete email configuration including MX records, SPF, DKIM, and DMARC while you browse. Ensure perfect email delivery. $29 one-time purchase.