diff --git a/CHANGES b/CHANGES index e94a7611c..60d035e32 100644 --- a/CHANGES +++ b/CHANGES @@ -1919,4 +1919,5 @@ * oauth: add backward compat layer for backup and uninstall * fix bug in disk usage sorting * mail: aliases can be across domains +* mail: allow an external MX to be set diff --git a/src/mail.js b/src/mail.js index 229a1f73a..b34619580 100644 --- a/src/mail.js +++ b/src/mail.js @@ -269,7 +269,7 @@ function checkMx(domain, mailFqdn, callback) { if (error) return callback(error, mx); if (mxRecords.length === 0) return callback(null, mx); - mx.status = mxRecords.length == 1 && mxRecords[0].exchange === mailFqdn; + mx.status = mxRecords.some(mx => mx.exchange === mailFqdn); // this lets use change priority and/or setup backup MX mx.value = mxRecords.map(function (r) { return r.priority + ' ' + r.exchange + '.'; }).join(' '); if (mx.status) return callback(null, mx); // MX record is "my." diff --git a/src/routes/test/mail-test.js b/src/routes/test/mail-test.js index 30848da08..65cf261da 100644 --- a/src/routes/test/mail-test.js +++ b/src/routes/test/mail-test.js @@ -298,7 +298,7 @@ describe('Mail API', function () { it('succeeds with all different spf, dkim, dmarc, mx, ptr records', function (done) { clearDnsAnswerQueue(); - dnsAnswerQueue[mxDomain].MX = [ { priority: '20', exchange: settings.mailFqdn() }, { priority: '30', exchange: settings.mailFqdn() } ]; + dnsAnswerQueue[mxDomain].MX = [ { priority: '20', exchange: settings.mailFqdn() }, { priority: '10', exchange: 'some.other.server' } ]; dnsAnswerQueue[dmarcDomain].TXT = [['v=DMARC2; p=reject; pct=100']]; dnsAnswerQueue[dkimDomain].TXT = [['v=DKIM2; t=s; p=' + mail._readDkimPublicKeySync(DOMAIN_0.domain)]]; dnsAnswerQueue[spfDomain].TXT = [['v=spf1 a:random.com ~all']]; @@ -324,9 +324,9 @@ describe('Mail API', function () { expect(res.body.dns.dmarc.value).to.eql('v=DMARC2; p=reject; pct=100'); expect(res.body.dns.mx).to.be.an('object'); - expect(res.body.dns.mx.status).to.eql(false); + expect(res.body.dns.mx.status).to.eql(true); expect(res.body.dns.mx.expected).to.eql('10 ' + settings.mailFqdn() + '.'); - expect(res.body.dns.mx.value).to.eql('20 ' + settings.mailFqdn() + '. 30 ' + settings.mailFqdn() + '.'); + expect(res.body.dns.mx.value).to.eql('20 ' + settings.mailFqdn() + '. 10 some.other.server.'); expect(res.body.dns.ptr).to.be.an('object'); expect(res.body.dns.ptr.expected).to.eql(settings.mailFqdn());