nodemailer
10.2.1 · 22 Oct 2026MIT-023.7M / weekRepositoryHomepagenpmAtom feed
305 stable releases, newest first, by release line. Notes are quoted as the maintainers published them.
- 10.x · latest line
10.2.1
22 Oct 2026- removed
Drop the comments of a Content-Type or Content-Disposition value with the stripComments option
10.2.0
21 Oct 2026Add info.serverMessageId from the final 250 reply
Add pendingCount() to the SMTP pool
Make header value encoding public with MimeNode encodeHeaderValue()
Features
Add info.serverMessageId from the final 250 reply
Add pendingCount() to the SMTP pool
Make header value encoding public with MimeNode encodeHeaderValue()
Mark SMTP errors as permanent or transient with err.permanent
Bug Fixes
Label an ASCII message/rfc822 attachment 7bit instead of 8bit
Report the recipients an LMTP server refuses after DATA in rejectedErrors
10.1.7
18 Oct 2026mime-funcs: encode parameter values that look like encoded words
10.1.6
18 Oct 2026addressparser: read groups in the same pass as the rest of the list
10.1.5
18 Oct 2026addressparser: handle an address list without copying it per address
addressparser: tokenize into offsets instead of an object per token
10.1.4
18 Oct 2026addressparser: apply the unexpected "<" rule outside quotes and comments
addressparser: bound group nesting at ten levels
addressparser: drop the obsolete route from an angle-addr
Bug Fixes
addressparser: apply the unexpected "<" rule outside quotes and comments
addressparser: bound group nesting at ten levels
addressparser: drop the obsolete route from an angle-addr
addressparser: end a comment only at the ")" that closes the outermost one
addressparser: honour quoted strings and comments inside an angle-addr and a group
addressparser: never read a mailbox out of a comment
addressparser: read CFWS beside the "@" of an addr-spec as nothing
addressparser: read the first addr-spec of the display text
Split a domain literal off at the "@" in front of it
10.1.3
18 Oct 2026Format References and strip URLs in linear time, release any number of streams
10.1.2
16 Oct 2026Bound the work a message can make the mailer do and keep per-message auth off the transport's token endpoint
10.1.1
14 Oct 2026fetch: strip credentials on any cross-origin redirect
10.1.0
10 Oct 2026Harden message streams, SMTP connections and the connection pool
Do not read the environment or the interface table on import
End the SMTP session on any 421 reply and drive the envelope through one step
Features
Harden message streams, SMTP connections and the connection pool
Bug Fixes
Do not read the environment or the interface table on import
End the SMTP session on any 421 reply and drive the envelope through one step
Keep ERR_ACCESS_DENIED from the Node.js permission model
Let the proxy handshake and the SMTP connection share one deadline
mime-node: decode an SMTPUTF8 domain from its A-label form
mime-node: finish an encoded part only after its output was read
qp: encode a lone CR or LF in binary quoted-printable parts
smtp-connection: count the wait for the greeting against connectionTimeout
smtp-connection: drop the connection when DATA is taken after a refused sender
smtp-connection: refuse a second connect() call
Turn Nagle off for SMTP sockets and report an early sendmail exit as such
Performance Improvements
Encode base64 and quoted-printable without per-chunk delays
10.0.16
7 Oct 2026addressparser: keep an escaped parenthesis inside a comment
fetch: keep the case of cookie names
fetch: read the cookie name-value pair by position
10.0.14
3 Oct 2026addressparser: keep a quoted display name that holds no "@" out of the address
addressparser: keep the group recursion depth out of the options object
addressparser: stop a "[" from hiding the operators after it
Bug Fixes
addressparser: keep a quoted display name that holds no "@" out of the address
addressparser: keep the group recursion depth out of the options object
addressparser: stop a "[" from hiding the operators after it
dkim: trim a header field name in linear time
mime-funcs: read and write header parameters per rfc2045 and rfc2231
Search only the new bytes for the end of the proxy CONNECT response
10.0.13
30 Sep 2026Read the advertised SASL methods without backtracking regexes
Strip comments inside an angle-addr before it becomes the address
10.0.12
28 Sep 2026Settle every send on a connection error, back off pool requeues, turn a bare CR into CRLF, bound fetch, honour requireTLS
10.0.11
27 Sep 2026fetch: report a form body that can not be encoded through the returned stream
Keep the CommonJS entry point and the services subpath compatible with the pre-TypeScript build
qp: keep wrap() terminating for short line lengths and a trailing incomplete escape
Bug Fixes
fetch: report a form body that can not be encoded through the returned stream
Keep the CommonJS entry point and the services subpath compatible with the pre-TypeScript build
qp: keep wrap() terminating for short line lengths and a trailing incomplete escape
smtp-connection: fail a password login cleanly when the server offers only XOAUTH2
types: restore the layout of @types/nodemailer in the bundled declarations
10.0.10
14 Sep 2026Derive the attachment filename from the basename of a Windows path
dkim: unfold folded header lines in linear time
smtp-connection: reassemble multiline replies in linear time
10.0.9
12 Sep 2026addressparser: bound the '@' probe to the run being scanned
addressparser: keep the text after a comment out of a quoted local part address
10.0.8
11 Sep 2026mime-node: clean the boundary where it is written, not only where it is built
mime-node: drop every control character from multipart boundary material
10.0.7
11 Sep 2026mime-funcs: do not double encode Buffer input when chunking base64 mime words
mime-node: keep a boundary that is only line breaks from stripping to empty
mime-node: strip line breaks from multipart boundary material
Bug Fixes
mime-funcs: do not double encode Buffer input when chunking base64 mime words
mime-node: keep a boundary that is only line breaks from stripping to empty
mime-node: strip line breaks from multipart boundary material
smtp-pool: release rate-limited connections on close
10.0.6
11 Sep 2026addressparser: scan free text for an address in linear time
10.0.5
11 Sep 2026addressparser: parse comment-joined addresses in linear time
10.0.4
11 Sep 2026fetch: scope a cookie without a Path to the RFC 6265 default path
fetch: send cookies set with Path back to the exact path
mail-composer: keep httpHeaders and tls for href alternatives and icalEvent
Bug Fixes
fetch: scope a cookie without a Path to the RFC 6265 default path
fetch: send cookies set with Path back to the exact path
mail-composer: keep httpHeaders and tls for href alternatives and icalEvent
Resolve well-known services by their primary domains
ses-transport: throw a configuration error when the SES client is missing
10.0.2
9 Sep 2026mime-node: flatten nested recipient arrays without recursion
shared: keep the TLS server name out of the DNS cache
10.0.0
4 Sep 2026- breaking
Node.js 20 or newer is required. The Node.js 6 syntax compatibility check and the .npmignore file are gone.
Keep the @types/nodemailer type layout working
Migrate to TypeScript with ES module and CommonJS builds
Breaking changes
- breaking
Node.js 20 or newer is required. The Node.js 6 syntax compatibility check and the .npmignore file are gone.
Features
Keep the @types/nodemailer type layout working
Migrate to TypeScript with ES module and CommonJS builds
Bug Fixes
Apply the other keys of a configuration object next to its url
dkim: canonicalize raw messages the way verifiers do
Keep a transporter assignable to the plain Transporter type
shared: keep a colon in the user name of a connection or proxy url
shared: refuse URL hosts the legacy parser would truncate
shared: resolve hostnames when the runtime has no interface table
smtp-connection: clear the timers of a connection dropped before the greeting
smtp-connection: keep an incomplete server reply out of lastServerResponse
smtp-pool: free the pool slot when the proxy socket can not be opened
well-known: keep nodemailer/lib/well-known/services.json available
- 9.x
9.1.1
1 Sep 2026mailer: apply the message access policy in resolveContent
mailer: keep message data from reopening the access sandbox
mime-node: inherit the access policy from the tree a node hangs in
9.1.0
31 Aug 2026mailer: cap recipients per message with maxRecipients
addressparser: handle address lists in linear time
addressparser: terminate the domain at an RFC 5322 comment
Features
mailer: cap recipients per message with maxRecipients
Bug Fixes
addressparser: handle address lists in linear time
addressparser: terminate the domain at an RFC 5322 comment
mime-node: apply UTS-46 mapping when encoding a domain
mime-node: dedupe envelope recipients in linear time
mime-node: flatten parsed addresses without concat.apply
mime-node: keep the recipient dedupe linear across address headers
mime-node: keep URL delimiters away from the domain mapper
9.0.6
27 Aug 2026addressparser: recover the addr-spec from an angle-addr holding whitespace
Harden copies of user supplied keys and URL fetching
9.0.5
7 Aug 2026mailer: escape specials in List-* header comments
mime-funcs: star the continuation key of a restarted parameter line
mime-node: keep control chars out of header values and msg-id headers
Bug Fixes
mailer: escape specials in List-* header comments
mime-funcs: star the continuation key of a restarted parameter line
mime-node: keep control chars out of header values and msg-id headers
mime: encode DEL in header parameters and List-* comments
mime: keep control chars out of the remaining header positions
mime: normalize an address parsed out of a string as well
mime: normalize an address so header and envelope agree
mime: stop a header key callback and the dkim tags from injecting
9.0.4
4 Aug 2026mime-funcs: do not let an unpaired surrogate consume the next character
mime-funcs: keep any surrogate pair intact when chunking base64 mime words
mime-funcs: percent encode unpaired surrogates in header parameter values
Bug Fixes
mime-funcs: do not let an unpaired surrogate consume the next character
mime-funcs: keep any surrogate pair intact when chunking base64 mime words
mime-funcs: percent encode unpaired surrogates in header parameter values
mime-node: escape backslash and quote in the Content-Type name parameter
mime: encode HT/CR/LF in header parameter values instead of quoting them
9.0.3
30 Jun 2026Reading the note…
9.0.2
30 Jun 2026Reading the note…
9.0.1
17 Jun 2026Reading the note…
9.0.0
14 Jun 2026Reading the note…
- 8.x
8.0.11
10 Jun 2026Reading the note…
8.0.10
29 May 2026Reading the note…
8.0.9
26 May 2026Reading the note…
8.0.8
23 May 2026Reading the note…
8.0.7
27 Apr 2026Reading the note…
8.0.6
24 Apr 2026Reading the note…
8.0.5
7 Apr 2026Reading the note…
8.0.4
25 Mar 2026Reading the note…
8.0.3
18 Mar 2026Reading the note…
8.0.2
9 Mar 2026Reading the note…
8.0.1
7 Feb 2026Reading the note…
8.0.0
4 Feb 2026Reading the note…
- 7.x
7.0.13
27 Jan 2026Reading the note…
7.0.12
22 Dec 2025Reading the note…