Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

SMTP timeout notes in smtp.ts and the changelog describe nodemailer 10.0, not 10.1

Abierto Apto para principiantes
#645 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@agammann ya está trabajando en esto.

Desde el 25/10/2026.

  • #666 de @agammann — abierto

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

enhancement good first issue pipeline:ready

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_MS says 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.ts still passes, since it only checks that greetingTimeout and socketTimeout are 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_MS in src/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 dnsTimeout and connectionTimeout for 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. Leave idleTimeout at 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.ts describes 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.ts has 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 test pass.

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

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de richshaw/OpenSignup

Todos los issues de richshaw/OpenSignup

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.