10.5.0 (2026-11-10)
Summary
Adds per-message cancellation to sendMail() with an AbortSignal, plus two encoding fixes: DKIM signatures for internationalized domains, and header text that looks like a broken encoded-word.
Who should upgrade
- Anyone who signs with DKIM for a domain written with upper case or mapped non-ASCII characters (an upper case IDN label, or one holding a soft hyphen). The
d=tag named a different domain thanFrom:, so verification and DMARC alignment failed. - Anyone who wants to cancel or time-limit a single send without closing the transport or pool.
Highlights
- AbortSignal per send:
sendMail({ ..., signal })on SMTP and pooled SMTP. An abort removes a queued message from the pool, or closes only the connection delivering it, and the send fails with anAbortError(codeEABORT). Other transports honor a signal that is already aborted and otherwise ignore it. Note that an abort late in DATA does not prove the server did not accept the message, so do not treatEABORTas safe to retry blindly. - DKIM: the
d=domain is encoded with UTS-46 mapping, the same way as the address headers. - Header encoding: plain text that a receiver would decode as an encoded-word without it being a valid one (such as
=?utf-8?Q?a b?=across a space) is now encoded. A valid encoded-word is still passed through, so subjects that are already encoded are not encoded twice. - SMTP connection: a supplied socket no longer connects, and TLS no longer starts, after the connection was closed.