Repository  -  API  -  Source


August 15, 2018
  • Use first IP address from DNS resolution when using a proxy (Limbozz) [d4ca847c]
  • Return raw email from SES transport (gabegorelick) [3aa08967]


June 15, 2018
  • Added option skipEncoding to JSONTransport


June 10, 2018
  • Fixes mime encoded-word compatibility issue with invalid clients like Zimbra


May 23, 2018
  • Fixed broken DKIM stream in Node.js v10
  • Updated error messages for SMTP responses to not include a newline


March 31, 2018
  • Readded logo author link to README that was accidentally removed a while ago


March 13, 2018
  • Removed unneeded dependency


March 6, 2018
  • When redirecting URL calls then do not include original POST content


March 6, 2018
  • Fixed Smtp connection freezing, when trying to send after close / quit (twawszczak) [73d3911c]


February 22, 2018
  • Support socks module v2 in addition to v1 [e228bcb2]
  • Fixed invalid promise return value when using createTestAccount [5524e627]
  • Allow using local addresses [8f6fa35f]


February 21, 2018
  • Added new message transport option normalizeHeaderKey(key)=>normalizedKey for custom header formatting


January 20, 2018
  • Added sponsors section to README
  • enclose encodeURIComponent in try..catch to handle invalid urls


December 8, 2017
  • Better handling of unexpectedly dropping connections


November 10, 2017
  • Changed default behavior for attachment option contentTransferEncoding. If it is unset then base64 encoding is used for the attachment. If it is set to false then previous default applies (base64 for most, 7bit for text)


October 25, 2017
  • Fixed a confict with Electron.js where timers do not have unref method


October 23, 2017
  • Added new mail object method mail.normalize(cb) that should make creating HTTP API based transports much easier


October 13, 2017
  • Expose streamed messages size and timers in info response


October 6, 2017
  • Allow generating preview links without calling createTestAccount first


October 3, 2017
  • No actual changes. Needed to push updated README to npmjs


September 25, 2017
  • Fixed JSONTransport attachment handling


August 28, 2017
  • Added new methods createTestAccount and getTestMessageUrl to use autogenerated email accounts from


April 13, 2017
  • Fixed issue with LMTP and STARTTLS


April 6, 2017
  • License changed from EUPLv1.1 to MIT


March 21, 2017
  • Fixed invalid List-* header generation


March 14, 2017
  • Emit an error if STARTTLS ends with connection being closed


March 14, 2017
  • Expose last server response for smtpConnection


March 8, 2017
  • Fixed SES transport, added missing response value


February 26, 2017
  • Fixed DKIM calculation for empty body
  • Ensure linebreak after message content. This fixes DKIM signatures for non-multipart messages where input did not end with a newline


February 17, 2017
  • Fixed missing transport.verify() methods for SES transport


February 17, 2017
  • Added missing error handlers for Sendmail, SES and Stream transports. If a messages contained an invalid URL as attachment then these transports threw an uncatched error


February 13, 2017
  • Fixed missing transport.on('idle') and transport.isIdle() methods for SES transports


February 13, 2017
  • Added built-in transport for AWS SES. Docs
  • Updated stream transport to allow building JSON strings. Docs
  • Added new method mail.resolveAll that fetches all attachments and such to be able to more easily build API-based transports


February 4, 2017
  • Fixed a bug with OAuth2 login where error callback was fired twice if getToken was not available.


February 3, 2017
  • Fixed a bug where Nodemailer threw an exception if disableFileAccess option was used
  • Added FLOSS exception declaration


January 31, 2017
  • Initial version of Nodemailer 3

This update brings a lot of breaking changes:

  • License changed from MIT to EUPL-1.1. This was possible as the new version of Nodemailer is a major rewrite. The features I don't have ownership for, were removed or reimplemented. If there's still some snippets in the code that have vague ownership then notify about the conflicting code and I'll fix it.
  • Requires Node.js v6+
  • All templating is gone. It was too confusing to use and to be really universal a huge list of different renderers would be required. Nodemailer is about email, not about parsing different template syntaxes
  • No NTLM authentication. It was too difficult to re-implement. If you still need it then it would be possible to introduce a pluggable SASL interface where you could load the NTLM module in your own code and pass it to Nodemailer. Currently this is not possible.
  • OAuth2 authentication is built in and has a different configuration. You can use both user (3LO) and service (2LO) accounts to generate access tokens from Nodemailer. Additionally there's a new feature to authenticate differently for every message – useful if your application sends on behalf of different users instead of a single sender.
  • Improved Calendaring. Provide an ical file to Nodemailer to send out calendar events.

And also some non-breaking changes:

  • All dependencies were dropped. There is exactly 0 dependencies needed to use Nodemailer. This brings the installation time of Nodemailer from NPM down to less than 2 seconds
  • Delivery status notifications added to Nodemailer
  • Improved and built-in DKIM signing of messages. Previously you needed an external module for this and it did quite a lousy job with larger messages
  • Stream transport to return a RFC822 formatted message as a stream. Useful if you want to use Nodemailer as a preprocessor and not for actual delivery.
  • Sendmail transport built-in, no need for external transport plugin

See for full documentation


December 8, 2016
  • Bumped mailcomposer that generates encoded-words differently which might break some tests


September 5, 2016
  • Added new options disableFileAccess and disableUrlAccess
  • Fixed envelope handling where cc/bcc fields were ignored in the envelope object


May 25, 2016
  • Removed shrinkwrap file. Seemed to cause more trouble than help


May 12, 2016
  • Fixed outdated shrinkwrap file


May 11, 2016
  • Bumped mailcomposer module to allow using false as attachment filename (suppresses filename usage)
  • Added NTLM authentication support


April 11, 2016
  • Bumped smtp transport modules to get newest smtp-connection that fixes SMTPUTF8 support for internationalized email addresses


April 8, 2016
  • Bumped mailcomposer to have better support for message/822 attachments


March 3, 2016
  • Fixed a bug with attachment filename that contains mixed unicode and dashes
  • Added built-in support for proxies by providing a new SMTP option proxy that takes a proxy configuration url as its value
  • Added option transport to dynamically load transport plugins
  • Do not require globally installed grunt-cli


February 20, 2016
  • Fixed a bug in SMTP requireTLS option that was broken


February 18, 2016
  • Removed the need to use clone dependency
  • Added new method verify to check SMTP configuration
  • Direct transport uses STARTTLS by default, fallbacks to plaintext if STARTTLS fails
  • Added new message option list for setting List-* headers
  • Add simple proxy support with getSocket method
  • Added new message option textEncoding. If textEncoding is not set then detect best encoding automatically
  • Added new message option icalEvent to embed iCalendar events. Example here
  • Added new attachment option raw to use prepared MIME contents instead of generating a new one. This might be useful when you want to handcraft some parts of the message yourself, for example if you want to inject a PGP encrypted message as the contents of a MIME node
  • Added new message option raw to use an existing MIME message instead of generating a new one


February 1, 2016

Republishing 2.1.0-rc.1 as stable. To recap, here's the notable changes between v2.0 and v2.1:

  • Implemented templating support. You can either use a simple built-in renderer or some external advanced renderer, eg. node-email-templates. Templating docs.
  • Updated smtp-pool to emit 'idle' events in order to handle message queue more effectively
  • Updated custom header handling, works everywhere the same now, no differences between adding custom headers to the message or to an attachment


Sneaked in some new features even though it is already rc

  • If a SMTP pool is closed while there are still messages in a queue, the message callbacks are invoked with an error
  • In case of SMTP pool the transporter emits 'idle' when there is a free connection slot available
  • Added method isIdle() that checks if a pool has still some free connection slots available


  • Bumped dependency versions


  • Added support for node-email-templates templating in addition to the built-in renderer


  • Implemented simple templating feature


  • Allow using prepared header values that are not folded or encoded by Nodemailer


  • Use the same header custom structure for message root, attachments and alternatives
  • Ensure that Message-Id exists when accessing message
  • Allow using array values for custom headers (inserts every value in its own row)


January 11, 2016
  • Released rc.2 as stable


  • Locked dependencies


  • Updated documentation to reflect changes with SMTP handling
  • Use beta versions for smtp/pool/direct transports
  • Updated logging


  • Use bunyan compatible logger instead of the emit('log') style
  • Outsourced some reusable methods to nodemailer-shared
  • Support setting direct/smtp/pool with the default configuration


  • Stream errors are not silently swallowed
  • Do not use format=flowed
  • Use nodemailer-fetch to fetch URL streams
  • jshint replaced by eslint


December 28, 2015

Allow connection url based SMTP configurations


November 13, 2015

Added defaults argument for createTransport to predefine commonn values (eg. from address)


November 9, 2015

Returns a Promise for sendMail if callback is not defined


October 8, 2015

Added priority option (high, normal, low) for setting Importance header


October 6, 2015

Replaced hyperquest with needle. Fixes issues with compressed data and redirects


October 5, 2015

Maintenance release. Bumped dependencies to get support for unicode filenames for QQ webmail and to support emoji in filenames


September 24, 2015

Use mailcomposer instead of built in solution to generate message sources. Bumped libmime gives better quoted-printable handling.


June 27, 2015

Added new message option watchHtml to specify Apple Watch specific HTML part of the message. See this post for details


April 25, 2015

Maintenance release, bumped buildmail version to get fixed format=flowed handling


April 25, 2015

Maintenance release, bumped dependencies


March 9, 2015

Maintenance release, upgraded dependencies. Replaced simplesmtp based tests with smtp-server based ones.


September 12, 2014

Maintenance release, upgrades buildmail and libmime. Allows using functions as transform plugins and fixes issue with unicode filenames in Gmail.


September 5, 2014

Proper handling of data uris as attachments. Attachment path property can also be defined as a data uri, not just regular url or file path.


August 21, 2014

Bumped libmime and mailbuild versions to properly handle filenames with spaces (short ascii only filenames with spaces were left unquoted).


August 18, 2014

Allow using encoded strings as attachments. Added new property encoding which defines the encoding used for a content string. If encoding is set, the content value is converted to a Buffer value using the defined encoding before usage. Useful for including binary attachemnts in JSON formatted email objects.


August 18, 2014

Return deprecatin error for v0.x style configuration


July 30, 2014

Bumped nodemailer-direct-transport dependency. Updated version includes a bugfix for Stream nodes handling. Important only if use direct-transport with Streams (not file paths or urls) as attachment content.


July 29, 2014

Added new method resolveContent() to get the html/text/attachment content as a String or Buffer.


July 23, 2014

Bugfix release. HTML node was instered twice if the message consisted of a HTML content (but no text content) + at least one attachment with CID + at least one attachment without CID. In this case the HTML node was inserted both to the root level multipart/mixed section and to the multipart/related sub section


July 16, 2014

Fixed a bug where Nodemailer crashed if the message content type was multipart/related


July 16, 2014

Upgraded nodemailer-smtp-transport to 0.1.11. The docs state that for SSL you should use 'secure' option but the underlying smtp-connection module used 'secureConnection' for this purpose. Fixed smpt-connection to match the docs.


July 15, 2014

Implemented missing #close method that is passed to the underlying transport object. Required by the smtp pool.


July 15, 2014

Total rewrite. See migration guide here:


July 9, 2014
  • Upgraded aws-sdk to 2.0.5


June 17, 2014
  • Bumped version to v0.7.0
  • Fix AWS-SES usage [5b6bc144]
  • Replace current SES with new SES using AWS-SDK (Elanorr) [c79d797a]
  • Updated about Node Email Templates (niftylettuce) [e52bef81]


May 15, 2014
  • Bumped version to v0.6.5
  • Use tildes instead of carets for dependency listing [5296ce41]
  • Allow clients to set a custom identityString (venables) [5373287d]
  • bugfix (adding "-i" to sendmail command line for each new mail) by copying this.args (vrodic) [05a8a9a3]
  • update copyright (gdi2290) [3a6cba3a]


May 13, 2014
  • Bumped version to v0.6.4
  • added npmignore, bumped dependencies [21bddcd9]
  • Add AOL to well-known services (msouce) [da7dd3b7]


April 16, 2014
  • Bumped version to v0.6.3
  • Upgraded simplesmtp dependency [dd367f59]


April 9, 2014
  • Bumped version to v0.6.2
  • Added error option to Stub transport [c423acad]
  • Use SVG npm badge (t3chnoboy) [677117b7]
  • add SendCloud to well known services (haio) [43c358e0]
  • High-res build-passing and NPM module badges (sahat) [9fdc37cd]


January 26, 2014
  • Bumped version to v0.6.1
  • Do not throw on multiple errors from sendmail command [c6e2cd12]
  • Do not require callback for pickup, fixes #238 [93eb3214]
  • Added AWSSecurityToken information to README, fixes #235 [58e921d1]
  • Added Nodemailer logo [06b7d1a8]


December 30, 2013
  • Bumped version to v0.6.0
  • Allow defining custom transport methods [ec5b48ce]
  • Return messageId with responseObject for all built in transport methods [74445cec]
  • Bumped dependency versions for mailcomposer and readable-stream [9a034c34]
  • Changed pickup argument name to 'directory' [01c3ea53]
  • Added support for IIS pickup directory with PICKUP transport (philipproplesch) [36940b59..360a2878]
  • Applied common styles [9e93a409]
  • Updated readme [c78075e7]


December 13, 2013
  • bumped version to v0.5.15
  • Updated README, added global options info for setting uo transports [554bb0e5]
  • Resolve public hostname, if resolveHostname property for a transport object is set to true [9023a6e1..4c66b819]


December 5, 2013
  • bumped version to v0.5.14
  • Expose status for direct messages [f0312df6]
  • Allow to skip the X-Mailer header if xMailer value is set to 'false' [f2c20a68]


December 3, 2013
  • bumped version to v0.5.13
  • Use the name property from the transport object to use for the domain part of message-id values (1598eee9)


December 2, 2013
  • bumped version to v0.5.12
  • Expose transport method and transport module version if available [a495106e]
  • Added 'he' module instead of using custom html entity decoding [c197d102]
  • Added xMailer property for transport configuration object to override X-Mailer value [e8733a61]
  • Updated README, added description for 'mail' method [e1f5f3a6]


November 28, 2013
  • bumped version to v0.5.11
  • Updated mailcomposer version. Replaces ent with he [6a45b790e]


November 26, 2013
  • bumped version to v0.5.10
  • added shorthand function mail() for direct transport type [88129bd7]
  • minor tweaks and typo fixes [f797409e..ceac0ca4]


November 25, 2013
  • bumped version to v0.5.9
  • Update for 'direct' handling [77b84e2f]
  • do not require callback to be provided for 'direct' type [ec51c79f]


November 22, 2013
  • bumped version to v0.5.8
  • Added support for 'direct' transport [826f226d..0dbbcbbc]


November 18, 2013
  • bumped version to v0.5.7
  • Replace \r\n by \n in Sendmail transport (rolftimmermans) [fed2089e..616ec90c] A lot of sendmail implementations choke on \r\n newlines and require \n This commit addresses this by transforming all \r\n sequences passed to the sendmail command with \n


November 15, 2013
  • bumped version to v0.5.6
  • Upgraded mailcomposer dependency to 0.2.4 [e5ff9c40]
  • Removed noCR option [e810d1b8]
  • Update wellknown.js, added FastMail (k-j-kleist) [cf930f6d]


October 30, 2013
  • bumped version to v0.5.5
  • Updated mailcomposer dependnecy version to 0.2.3
  • Remove legacy code - node v0.4 is not supported anymore anyway
  • Use hostname (autodetected or from the property) for Message-Id instead of "Nodemailer" (helps a bit when messages are identified as spam)
  • Added maxMessages info to README


October 29, 2013
  • bumped version to v0.5.4
  • added "use strict" statements
  • Added DSN info to README
  • add support for QQ enterprise email (coderhaoxin)
  • Add a Bitdeli Badge to README
  • DSN options Passthrought into simplesmtp. (irvinzz)


October 3, 2013
  • bumped version v0.5.3
  • Using a stub transport to prevent sendmail from being called during a test. (jsdevel)
  • closes #78: sendmail transport does not work correctly on Unix machines. (jsdevel)
  • Updated PaaS Support list to include Modulus. (fiveisprime)
  • Translate self closing break tags to newline (kosmasgiannis)
  • fix typos (aeosynth)


July 25, 2013
  • bumped version v0.5.2
  • Merge pull request #177 from MrSwitch/master Fixing Amazon SES, fatal error caused by bad connection