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: