UNPKG

lockit-sendmail

Version:

utilities for all the email communication from lockit

129 lines (103 loc) 3.02 kB
'use strict'; var nodemailer = require('nodemailer'); var ejs = require('ejs'); /** * Email constructor function. * * @constructor * @param {Object} config */ var Email = module.exports = function(config) { if (!(this instanceof Email)) {return new Email(config); } this.template = require(config.emailTemplate); this.transport = require(config.emailType); this.config = config; }; /** * Send email with nodemailer. * * @private * @param {String} type * @param {String} username * @param {String} email * @param {Function} done */ Email.prototype.send = function(type, username, email, done) { var config = this.config; var that = this; var subject = config[type].subject; var title = config[type].title; var text = config[type].text; this.template(title, text, function(err, html) { if (err) {return done(err); } // default local variables var locals = { appname: config.appname, link: that.link, username: username }; // add options var options = { from: config.emailFrom, to: email, subject: ejs.render(subject, locals), html: ejs.render(html, locals) }; // send email with nodemailer var transporter = nodemailer.createTransport(that.transport(config.emailSettings)); transporter.sendMail(options, function(error, res){ if(err) {return done(error); } transporter.close(); // shut down the connection pool, no more messages done(null, res); }); }); }; /** * Send signup email. * * @param {String} username * @param {String} email * @param {String} token * @param {Function} done */ Email.prototype.signup = function(username, email, token, done) { var c = this.config; this.link = '<a href="' + c.url + c.signup.route + '/' + token + '">' + c.emailSignup.linkText + '</a>'; this.send('emailSignup', username, email, done); }; /** * Send signup email again. * * @param {String} username * @param {String} email * @param {String} token * @param {Function} done */ Email.prototype.resend = function(username, email, token, done) { var c = this.config; this.link = '<a href="' + c.url + c.signup.route + '/' + token + '">' + c.emailResendVerification.linkText + '</a>'; this.send('emailResendVerification', username, email, done); }; /** * Send email to email address owner with notice about signup. * * @param {String} username * @param {String} email * @param {Function} done */ Email.prototype.taken = function(username, email, done) { this.send('emailSignupTaken', username, email, done); }; /** * Send email with link for new password. * * @param {String} username * @param {String} email * @param {String} token * @param {Function} done */ Email.prototype.forgot = function(username, email, token, done) { var c = this.config; this.link = '<a href="' + c.url + c.forgotPassword.route + '/' + token + '">' + c.emailForgotPassword.linkText + '</a>'; this.send('emailForgotPassword', username, email, done); };