fix: add 30s timeout to SMTP connections to prevent indefinite blocking

linuztx committed Mar 16, 2026 at 11:51 UTC bde70626504076fc0b83f58a229390076b8e5987
1 file changed +6 -4
plugins/_email_integration/helpers/smtp_client.py
+6 -4
@@ -20,6 +20,8 @@ from helpers.print_style import PrintStyle
20 # Data models
21 # ------------------------------------------------------------------
22
23 +SMTP_TIMEOUT: int = 30
24 +
25 @dataclass
26 class SmtpConfig:
27 server: str
@@ -68,14 +70,14 @@ async def send_reply(
70 msg["References"] = references or in_reply_to
71
72 if config.use_tls:
71 - with smtplib.SMTP(config.server, config.port) as server:
73 + with smtplib.SMTP(config.server, config.port, timeout=SMTP_TIMEOUT) as server:
74 server.ehlo()
75 server.starttls()
76 server.ehlo()
77 server.login(config.username, config.password)
78 server.send_message(msg)
79 else:
78 - with smtplib.SMTP_SSL(config.server, config.port) as server:
80 + with smtplib.SMTP_SSL(config.server, config.port, timeout=SMTP_TIMEOUT) as server:
81 server.login(config.username, config.password)
82 server.send_message(msg)
83
@@ -98,13 +100,13 @@ async def test_smtp(config: SmtpConfig) -> str | None:
100
101 def _sync_test():
102 if config.use_tls:
101 - with smtplib.SMTP(config.server, config.port) as server:
103 + with smtplib.SMTP(config.server, config.port, timeout=SMTP_TIMEOUT) as server:
104 server.ehlo()
105 server.starttls()
106 server.ehlo()
107 server.login(config.username, config.password)
108 else:
107 - with smtplib.SMTP_SSL(config.server, config.port) as server:
109 + with smtplib.SMTP_SSL(config.server, config.port, timeout=SMTP_TIMEOUT) as server:
110 server.login(config.username, config.password)
111
112 try: