From 7f9f3f683bb44a5fdfba28e0c5765aa877c553b7 Mon Sep 17 00:00:00 2001 From: Girish Ramakrishnan Date: Thu, 20 Nov 2025 16:03:13 +0100 Subject: [PATCH] Fix outbound port 25 relay warning (prefer ipv4) --- src/mail.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/mail.js b/src/mail.js index 4f0450c4e..2fc4ceff6 100644 --- a/src/mail.js +++ b/src/mail.js @@ -241,12 +241,10 @@ async function checkSmtpRelay(relay) { if (relay.provider === 'noop') return { status: 'skipped', message: 'Outbound disabled' }; if (relay.provider === 'cloudron-smtp') { const results = await Promise.allSettled([ checkOutboundPort25(4), checkOutboundPort25(6) ]); - if (results[0].status === 'fulfilled' && results[1].status === 'fulfilled') return { status: 'passed', message: 'Port 25 (outbound) is unblocked' }; - const messages = []; - if (results[0].status === 'rejected') messages.push(results[0].reason.message); - if (results[1].status === 'rejected') messages.push(results[1].reason.message); - messages.push('Check if port 25 (outbound) is blocked.'); - return { status: 'failed', message: messages.join('. ') }; + if (results[0].status === 'fulfilled' && results[1].status === 'fulfilled') return { status: 'passed', message: 'Port 25 outbound is unblocked' }; + if (results[0].status === 'fulfilled') return { status: 'passed', message: 'IPv4 port 25 outbound is unblocked. IPv6 port 25 outbound is blocked and delivery to IPv6 only servers will fail,' }; // ipv6 only servers are not really common + if (results[1].status === 'fulfilled') return { status: 'failed', message: `IPv4 port 25 outbound is blocked: ${results[0].reason.message}.` }; // only IPv6 worked + return { status: 'failed', message: `Port 25 outbound is blocked. ${results[0].reason.message}` }; // both failed } const options = {