Reputation: 855
I am trying to setup NodeMailer on my existing application. I am trying to setup the NodeMailer configuration on my main app.ts
, then use it app wide to send mails wherever needed. This is what I have in my app.ts
:
import * as mailer from 'nodemailer';
const app = express();
dotenv.load({ path: '.env' });
app.set('port', (process.env.PORT || 3000));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
let mongodbURI = process.env.MONGODB_URI;
mongoose.Promise = global.Promise;
const mongodb = mongoose.connect(mongodbURI, { useMongoClient: true });
var mailConfig = {
host: process.env.MAIL_HOST,
port: process.env.MAIL_PORT,
auth: {
user: process.env.MAIL_USERNAME,
pass: process.env.MAIL_PASSWORD
}
};
let transporter = mailer.createTransport(mailConfig);
mongodb
.then((db) => {
console.log('Connected to MongoDB on', db.host + ':' + db.port);
setRoutes(app);
if (!module.parent) {
app.listen(app.get('port'), () => {
console.log('API listening on port ' + app.get('port'));
});
}
})
.catch((err) => {
console.error(err);
});
export { app };
I tried things like app.use(transporter)
and app.set('transporter',transporter)
. But seems that not quite the way to do it. How can I declare it app wide and use the object at other places like the controller/user.ts
?
Upvotes: 0
Views: 1086
Reputation: 872
Create a separate js file for your transport and import it inside whichever module it is required.
transport.js
var mailer = require('nodemailer');
var mailConfig = {
host: process.env.MAIL_HOST,
port: process.env.MAIL_PORT,
auth: {
user: process.env.MAIL_USERNAME,
pass: process.env.MAIL_PASSWORD
}
};
var transporter = mailer.createTransport(mailConfig);
module.exports = transporter;
app.js or any other module where you want to use nodemailer
var transporter = require('./transport');
transporter.sendMail(mailOptions, function(error, info) {
if (error) {
//Error
} else {
//Success
}
});
Upvotes: 2