From ccf66afdab31f460fb84c1d3f180a58992ae461e Mon Sep 17 00:00:00 2001 From: missytake Date: Tue, 13 Jan 2026 14:10:54 +0100 Subject: [PATCH 1/2] add --send-host and --recv-host for no-dns setups --- cmping.py | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/cmping.py b/cmping.py index 204d571..a226e7c 100644 --- a/cmping.py +++ b/cmping.py @@ -5,6 +5,7 @@ import argparse import os import random +import secrets import signal import string import threading @@ -30,6 +31,16 @@ def main(): nargs="?", help="chatmail relay domain (defaults to relay1 if not specified)", ) + parser.add_argument( + "--send-host", + action="store", + help="SMTP & IMAP host of sending relay", + ) + parser.add_argument( + "--recv-host", + action="store", + help="SMTP & IMAP host of receiving relay", + ) parser.add_argument( "-c", dest="count", @@ -50,6 +61,7 @@ def main(): args = parser.parse_args() if not args.relay2: args.relay2 = args.relay1 + args.recv_host = args.send_host pinger = perform_ping(args) raise SystemExit(0 if pinger.received == pinger.sent else 1) @@ -70,7 +82,7 @@ def _add_online(self, account): account.start_io() self.online.append(account) - def get_relay_account(self, domain): + def get_relay_account(self, domain, host): for account in self.dc.get_all_accounts(): addr = account.get_config("configured_addr") if addr is not None and addr.split("@")[1] == domain: @@ -79,7 +91,17 @@ def get_relay_account(self, domain): else: print(f"# creating account on {domain}") account = self.dc.add_account() - account.set_config_from_qr(f"dcaccount:{domain}") + if host: + ALPHANUMERIC = string.ascii_lowercase + string.digits + user = "".join(random.choices(ALPHANUMERIC, k=9)) + password = "".join( + secrets.choice(ALPHANUMERIC) + for _ in range(20) + ) + dclogin = f"dclogin:{user}@{domain}?v=1&p={password}&sh={host}&ih={host}&sc=3&ic=3" + account.set_config_from_qr(dclogin) + else: + account.set_config_from_qr(f"dcaccount:{domain}") self._add_online(account) return account @@ -91,8 +113,8 @@ def perform_ping(args): with Rpc(accounts_dir=accounts_dir) as rpc: dc = DeltaChat(rpc) maker = AccountMaker(dc) - sender = maker.get_relay_account(args.relay1) - receiver = maker.get_relay_account(args.relay2) + sender = maker.get_relay_account(args.relay1, args.send_host) + receiver = maker.get_relay_account(args.relay2, args.recv_host) maker.wait_all_online() _ = receiver.create_chat(sender) From 168ffe0d39c1c2ea267e935f44a45e95d97132dd Mon Sep 17 00:00:00 2001 From: missytake Date: Tue, 13 Jan 2026 14:13:56 +0100 Subject: [PATCH 2/2] use port 443 if --send_host/--recv-host are specified --- cmping.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmping.py b/cmping.py index a226e7c..d878fb4 100644 --- a/cmping.py +++ b/cmping.py @@ -98,7 +98,7 @@ def get_relay_account(self, domain, host): secrets.choice(ALPHANUMERIC) for _ in range(20) ) - dclogin = f"dclogin:{user}@{domain}?v=1&p={password}&sh={host}&ih={host}&sc=3&ic=3" + dclogin = f"dclogin:{user}@{domain}?v=1&p={password}&sh={host}&sp=443&ih={host}&ip=443&sc=3&ic=3" account.set_config_from_qr(dclogin) else: account.set_config_from_qr(f"dcaccount:{domain}")