From 9f74d0a608bceaa77c254a337a0027f57c3ca393 Mon Sep 17 00:00:00 2001 From: holger krekel Date: Thu, 10 Apr 2025 16:20:24 +0200 Subject: [PATCH] cleanly time out trying to connect to port 25 and treat failure as "skip" not real failure. --- CHANGELOG.md | 3 +++ cmdeploy/src/cmdeploy/tests/online/test_0_login.py | 7 ++++++- cmdeploy/src/cmdeploy/tests/online/test_1_basic.py | 7 ++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9eba808d..11b73ec3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## untagged +- Handle Port-25 connect errors more gracefully (common with VPNs) + ([#552](https://github.com/chatmail/relay/pull/552)) + - Avoid "acmetool not found" during initial run ([#550](https://github.com/chatmail/relay/pull/550)) diff --git a/cmdeploy/src/cmdeploy/tests/online/test_0_login.py b/cmdeploy/src/cmdeploy/tests/online/test_0_login.py index 5f4f9778..69f79f7d 100644 --- a/cmdeploy/src/cmdeploy/tests/online/test_0_login.py +++ b/cmdeploy/src/cmdeploy/tests/online/test_0_login.py @@ -90,8 +90,13 @@ def test_concurrent_logins_same_account( def test_no_vrfy(chatmail_config): + domain = chatmail_config.mail_domain sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.connect((chatmail_config.mail_domain, 25)) + sock.settimeout(10) + try: + sock.connect((domain, 25)) + except socket.timeout: + pytest.skip(f"port 25 not reachable for {domain}") banner = sock.recv(1024) print(banner) sock.send(b"VRFY wrongaddress@%s\r\n" % (chatmail_config.mail_domain.encode(),)) diff --git a/cmdeploy/src/cmdeploy/tests/online/test_1_basic.py b/cmdeploy/src/cmdeploy/tests/online/test_1_basic.py index 980d7069..fe449e0f 100644 --- a/cmdeploy/src/cmdeploy/tests/online/test_1_basic.py +++ b/cmdeploy/src/cmdeploy/tests/online/test_1_basic.py @@ -118,7 +118,12 @@ def test_authenticated_from(cmsetup, maildata): def test_reject_missing_dkim(cmsetup, maildata, from_addr): recipient = cmsetup.gen_users(1)[0] msg = maildata("encrypted.eml", from_addr=from_addr, to_addr=recipient.addr).as_string() - with smtplib.SMTP(cmsetup.maildomain, 25) as s: + try: + conn = smtplib.SMTP(cmsetup.maildomain, 25, timeout=10) + except TimeoutError: + pytest.skip(f"port 25 not reachable for {cmsetup.maildomain}") + + with conn as s: with pytest.raises(smtplib.SMTPDataError, match="No valid DKIM signature"): s.sendmail(from_addr=from_addr, to_addrs=recipient.addr, msg=msg)