nodemailer - How can I form a wrapper for another module in Node.JS? -
i have following custom module using wrapper nodemailer
var nodemailer = require("nodemailer"); function emailer(to, subject, message) { this.to = to; this.subject = subject; this.message = message; this.smtptransport = nodemailer.createtransport("smtp",{ service: "gmail", // sets automatically host, port , connection security settings auth: { user: "*******", pass: "*******" } }); this.send = send; function send() { this.smtptransport.sendmail({ //email options from: "******* <*****>", // sender address. must same authenticated user if using gmail. to: this.to, // receiver subject: this.subject, // subject text: this.message // body }, function(error, response){ //callback if(error){ //console.log(error); }else{ //console.log("message sent: " + response.message); } smtptransport.close(); // shut down connection pool, no more messages. comment line out continue sending emails. }); }; } module.exports = emailer; i implementing this:
var emailer = require('./models/emailer.js'); var myemailer = new emailer('--------', 'my subject', 'my message'); myemailer.send(); it works, still error:
referenceerror: smtptransport not defined @ mailcomposer.returncallback (/users/drewwyatt/sites/js/node/tutorials/email/models/emailer.js:28:7) what doing wrong?
the problem line:
smtptransport.close(); you can avoid referenceerror binding callback context of mailer.
this.smtptransport.sendmail({ /* options */ }, function (err, response) { // stuff this.smtptransport.close(); }.bind(this)); it make more sense put send method on prototype, because uses state of instance.
emailer.prototype.send = function () { // this.smtptransport ... }; finally, name email instead of emailer :)
Comments
Post a Comment