UNPKG

nodemailer

Version:

Easy to use module to send e-mails, supports unicode and SSL/TLS

92 lines (77 loc) 2.5 kB
var SendmailTransport = require("./engines/sendmail"), SMTPTransport = require("./engines/smtp"), SESTransport = require("./engines/ses"), StubTransport = require("./engines/stub"); // Expose to the world module.exports.Transport = Transport; /** * Hash of available transports (uppercase) and their constructor methods */ Transport.transports = { "SMTP": SMTPTransport, "SES": SESTransport, "SENDMAIL": SendmailTransport, "STUB": StubTransport }; /** * <p>Generates a Transport object that can be used to deliver e-mail.</p> * * <p>All transport objects need to have <code>sendMail</code> property defined * and if needed, also an <code>close</code> method</p> * * @constructor * @param {String} type The type of the transport, currently available: SMTP, SES and Sendmail */ function Transport(type, options){ this.options = options; this.transportType = (type || "").toString().trim().toUpperCase(); this.dkimOptions = false; var constructor = Transport.transports[this.transportType]; if(constructor){ this.transport = new constructor(this.options); }else{ this.transport = false; } } /** * <p>Forwards the generated mailcomposer object to the selected transport * object for message delivery</p> * * @param {Object} emailMessage MailComposer object * @param {Function} callback Callback function to run when the sending is completed */ Transport.prototype.sendMailWithTransport = function(emailMessage, callback){ if(!this.transport){ return callback(new Error("Invalid transport method defined")); } if(this.dkimOptions){ emailMessage.useDKIM(this.dkimOptions); } this.transport.sendMail(emailMessage, callback); }; /** * <p>Sets up DKIM signing for this transport object</p> * * @param {Object} dkim DKIM options */ Transport.prototype.useDKIM = function(dkim){ this.dkimOptions = dkim; }; /** * <p>Closes the transport when needed, useful with SMTP (which uses connection * pool) but not so much with SES or Sendmail</p> * * @param {Function} Callback function to run when the connection is closed */ Transport.prototype.close = function(callback){ if(!this.transport){ return callback(new Error("Invalid transport method defined")); } if(typeof this.transport.close == "function"){ this.transport.close(callback); }else{ if(typeof callback == "function"){ callback(null); } } };