SMTP timeout notes in smtp.ts and the changelog describe nodemailer 10.0, not 10.1
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 82/100
- Tipo de issue
- Documentación
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- node.js, typescript
- Área
- backend
Línea de trabajo
Lee los comentarios encima de SMTP_DNS_TIMEOUT_MS y SMTP_MAX_CONNECTIONS en src/email/smtp.ts, la prueba indicada en src/email/smtp.test.ts y la entrada Unreleased Fixed en CHANGELOG. Actualiza esas notas para describir el plazo compartido de conexión de 10 segundos, el cierre de conexiones inactivas del pool tras cuatro minutos y qué comprueba la prueba; mantén los valores de timeout sin cambios. El trabajo estará terminado cuando ninguno de estos lugares describa un timeout por dirección ni un saludo de 30 segundos.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
What happens
nodemailer 10.1, which #616 brings in, changed what connectionTimeout covers. In 10.0 it bounded only the TCP connect, and it started again for each address a host name resolves to. In 10.1 it is one deadline for setting up the whole session: the DNS lookup, every address tried, the TCP connect, TLS, the server's greeting and the STARTTLS upgrade. nodemailer's pool also now closes a connection itself after 4 minutes idle (its new idleTimeout, default 240 s).
We set that limit to 10 s (SMTP_CONNECTION_TIMEOUT_MS in src/email/smtp.ts), and three places still describe 10.0:
- The comment above
SMTP_DNS_TIMEOUT_MSsays the connect limit is per address, so "with three addresses down the sign-in request's own 30 s limit runs out first", and that once a server answers its pace is left to nodemailer's defaults, "30 s for the greeting". Now a host that is down fails in 10 s however many addresses it has, and the greeting has to arrive within what's left of the same 10 s. - The test "leaves a server that has answered to nodemailer's defaults" in
src/email/smtp.test.tsstill passes, since it only checks thatgreetingTimeoutandsocketTimeoutare unset, but its name now promises more than is true. - The CHANGELOG (Unreleased, Fixed, the
SMTP_SECURE/ port 465 entry) says a host that is down fails "in about 10 seconds for each address its name resolves to (nodemailer tries them in turn)".
Nothing breaks. The tophat on #616 measured it: a server that waits 12 s before its greeting gets the email on 10.0.9, and on 10.1.4 the send fails at 10 s with ETIMEDOUT "Greeting never received". Real submission relays greet in well under a second. The cost is the notes: the next person to tune these limits would start from the wrong model.
Fix, in outline
- Rewrite the comment above
SMTP_DNS_TIMEOUT_MS/SMTP_CONNECTION_TIMEOUT_MS: one 10 s budget runs from the DNS lookup to the end of STARTTLS, across every address, so a host that is down or never greets fails in 10 s, well inside the sign-in request's 30 s (MAGIC_LINK_SEND_TIMEOUT_MSinsrc/auth/magic-link-send.ts). Keep the reason the later limits are left alone: once the message is being sent, a timeout after the relay took it means a retried reminder and a duplicate email. - Keep both values at 10 s. Failing fast is still the point, and it leaves room under the 30 s sign-in limit. Note that nodemailer now uses the smaller of
dnsTimeoutandconnectionTimeoutfor the lookup. - In the pool comment above
SMTP_MAX_CONNECTIONS, add that nodemailer closes a pooled connection after 4 minutes idle, and the next email opens a new one. LeaveidleTimeoutat nodemailer's default. - Rename the test to say what it checks, for example "leaves the pace after the greeting to nodemailer's defaults", and adjust its comment to match.
- Correct the CHANGELOG entry in place (it's still Unreleased): a mail host that is down, or that doesn't greet, now fails a send in about 10 seconds in all.
Watch for
- Comments, one test name and the changelog only. No value changes, so nothing to tophat.
- The test "gives up on a host that is down in seconds, not minutes" pins both values at 10 s or less. Leave it as it is.
- The #333 entry under Changed in the CHANGELOG ("A connection the mail server closes while idle is dropped, and the next email opens a new one") is still true. Add the 4-minute idle close there only if it reads naturally.
Order
After #616, because these notes should describe the nodemailer version on main, and #616 is what brings in 10.1.
Done when
- The comment in
src/email/smtp.tsdescribes one connection deadline covering DNS, every address, TLS, the greeting and STARTTLS, and the pool's 4-minute idle close. It no longer mentions a per-address limit or a 30 s greeting. - The test in
src/email/smtp.test.tshas a name that matches what it checks. - The CHANGELOG no longer says the 10 s applies per address.
pnpm lint && pnpm typecheck && pnpm knip && pnpm testpass.
From the tophat of #616 (nodemailer 10.0.9 → 10.1.4), checked against main at ee0f0d5. Verified by sending through SmtpTransport on both versions to a local Mailpit relay and to a stand-in server that delays its greeting, and by reading nodemailer 10.1.4's smtp-connection and smtp-pool.
Generated by Claude Code
- Lenguaje dominante
- TypeScript
- Estrellas
- 19
- Forks
- 4
- Merge medio
- 21 h 3 min
- PR fusionados (30 d)
- 176
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de richshaw/OpenSignup
-
enhancement pipeline:proposed pipeline:ux
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
richshaw/OpenSignup#654 ·
Los mantenedores suelen responder en 1 día
-
The help pages never say "pause", so organizers looking for it miss Close or reopen a signupPosiblemente ocupada @richshaw la tomó hoy. Abiertoenhancement pipeline:building pipeline:ux
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
richshaw/OpenSignup#653 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
enhancement pipeline:proposed pipeline:ux
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
richshaw/OpenSignup#652 ·
Los mantenedores suelen responder en 1 día
-
enhancement pipeline:proposed pipeline:ux
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
richshaw/OpenSignup#589 ·
Los mantenedores suelen responder en 1 día
-
enhancement pipeline:proposed pipeline:ux
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
richshaw/OpenSignup#588 ·
Los mantenedores suelen responder en 1 día
Todos los issues de richshaw/OpenSignup
Issues similares
-
area: server priority: P3 type: bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
appandflow/stim#4538 ·
Los mantenedores suelen responder en 1 día
-
[BUG] Published Docker images lack the redis extra: HEADROOM_COMPRESS_SESSION_STORE stops startupPosiblemente ocupada @AlessandroSpallina la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
headroomlabs-ai/headroom#4513 ·
Los mantenedores suelen responder en 1 día
-
bug extension extension: obsidian platform: Windows
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
raycast/extensions#32838 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
copy design-review mac P3
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
tosunlab/hisarapp-core#510 ·
-
bug priority-medium to-agent
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día