From c7d36ac06e8aa680c4baa69ed32bbcd4e5983a98 Mon Sep 17 00:00:00 2001 From: Girish Ramakrishnan Date: Sat, 28 Jun 2025 12:57:05 +0200 Subject: [PATCH] mail: fix status variable checks --- dashboard/src/components/MailDomainStatus.vue | 2 +- src/mail.js | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dashboard/src/components/MailDomainStatus.vue b/dashboard/src/components/MailDomainStatus.vue index 59f6d28c0..ab1f8fcf6 100644 --- a/dashboard/src/components/MailDomainStatus.vue +++ b/dashboard/src/components/MailDomainStatus.vue @@ -85,7 +85,7 @@ onMounted(async () => { {{ $t('email.dnsStatus.current') }}: - {{ domainStatus[type].value ? domainStatus[type].value : ('['+$t('email.dnsStatus.recordNotSet')+']') }} + {{ domainStatus[type].value ? domainStatus[type].value : ('['+$t('email.dnsStatus.recordNotSet')+']') }} {{ domainStatus[type].message }} diff --git a/src/mail.js b/src/mail.js index c778b5889..0fa9818c5 100644 --- a/src/mail.js +++ b/src/mail.js @@ -277,7 +277,7 @@ async function checkSpf(mailDomain, mailFqdn) { }; const [error, txtRecords] = await safe(dig.resolve(result.domain, result.type, DNS_OPTIONS)); - if (error) return Object.assign(result, { message: error.message }); + if (error) return Object.assign(result, { status: 'failed', message: error.message }); let i; for (i = 0; i < txtRecords.length; i++) { @@ -364,7 +364,7 @@ async function checkDmarc(mailDomain) { const [error, txtRecords] = await safe(dig.resolve(result.domain, result.type, DNS_OPTIONS)); if (error) return Object.assign(result, { status: 'failed', message: error.message }); - if (txtRecords.length === 0) return Object.assign(result, { status: 'failed', message: 'No DMARC records' }); + if (txtRecords.length === 0) return Object.assign(result, { status: 'failed', message: 'No DMARC record' }); result.value = txtRecords[0].join(''); const actual = txtToDict(result.value); @@ -596,12 +596,12 @@ async function checkConfiguration() { const message = []; - Object.keys(result.dns).forEach((type) => { - const record = result.dns[type]; - if (!record.status) message.push(`${type.toUpperCase()} DNS record (${record.type}) did not match.\n * Hostname: \`${record.name}\`\n * Expected: \`${record.expected}\`\n * Actual: \`${record.value}\``); + [ 'mx', 'dmarc', 'spf', 'dkim', 'ptr4', 'ptr6' ].forEach((type) => { + const record = result[type]; + if (record.status === 'failed') message.push(`${type.toUpperCase()} DNS record (${record.type}) did not match.\n * Hostname: \`${record.name}\`\n * Expected: \`${record.expected}\`\n * Actual: \`${record.value || record.message}\``); }); - if (result.relay && result.relay.status === false) message.push(`Relay error: ${result.relay.value}`); - if (result.rbl && result.rbl.status === false) { // rbl field contents is optional + if (result.relay.status === 'failed') message.push(`Relay error: ${result.relay.message}`); + if (result.rbl4.status === 'failed') { const servers = result.rbl.servers.map((bs) => `[${bs.name}](${bs.site})`); // in markdown message.push(`This server's IP \`${result.rbl.ip}\` is blocked in the following servers - ${servers.join(', ')}`); }