I am trying to use nodemailer in expressjs app. Should I keep creating of transport object out of route handler or creating transport object inside route handler is just fine?
var express = require('express')
, app = express()
, nodemailer = require('nodemailer');
smtpTrans = nodemailer.createTransport('SMTP', {
service: 'Gmail',
auth: {
user: "[email protected]",
pass: "application-specific-password"
}
});
app.post('/register', function(req, res){
smtpTrans.sendMail(mailOptions);
});
or
var express = require('express')
, app = express()
, nodemailer = require('nodemailer');
app.post('/register', function(req, res){
smtpTrans = nodemailer.createTransport('SMTP', {
service: 'Gmail',
auth: {
user: "[email protected]",
pass: "application-specific-password"
}
});
smtpTrans.sendMail(mailOptions);
});
You have to think about your use case to make a choice.
The SMTP transport in nodemailer
creates a connection pool that you explicitly have to close. This is good because the connection always stays open: you only suffer the connection delays (including TLS negotiation, etc.) when the app starts up.
Your first solution is then good if you send a lot of messages: by keeping a connection open you'll minimize the delay and resource utilization by using the connection pool.
On the other hand, your second solution is good if you send few messages: there's no need to maintain a connection if you send one email per hour. Be careful, as your current code is a bit wrong: you need to explicitly close the connection pool. If you don't, the connection pool will stay open even if you loose the reference to the object.
smtpTrans = nodemailer.createTransport('SMTP', { … });
smtpTrans.sendMail(mailOptions, function (err, responseStatus) {
smtpTrans.close(); // Don't forget to close the connection pool!
});
From the looks of this issue, it seems that all errors are reported in the err
parameter of the smtpTrans.sendMail
callback.
Edit: This answer was written for Nodemailer 0.7. 1.0 is now out and has a few breaking changes, including on how it handles transports and connections. See this blog post for more information.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With