2019-01-22 08:55:35 +00:00
|
|
|
const nodemailer = require('nodemailer');
|
2019-10-29 06:46:44 +00:00
|
|
|
const config = require('./config');
|
2019-11-18 14:04:51 +00:00
|
|
|
const db = require('./database');
|
2019-01-22 08:55:35 +00:00
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
init() {
|
|
|
|
if (!this.transporter)
|
|
|
|
this.transporter = nodemailer.createTransport(config.smtp);
|
|
|
|
},
|
|
|
|
|
|
|
|
send(options) {
|
2019-11-18 14:04:51 +00:00
|
|
|
options.from = `${config.app.senderName} <${config.app.senderEmail}>`;
|
2019-01-22 08:55:35 +00:00
|
|
|
|
2019-09-30 11:02:11 +00:00
|
|
|
if (process.env.NODE_ENV !== 'production') {
|
2019-10-29 06:46:44 +00:00
|
|
|
if (!config.smtp.auth.user)
|
2019-09-30 11:02:11 +00:00
|
|
|
return Promise.resolve(true);
|
|
|
|
|
2019-11-18 14:04:51 +00:00
|
|
|
options.to = config.app.senderEmail;
|
2019-09-30 11:02:11 +00:00
|
|
|
}
|
2019-01-22 08:55:35 +00:00
|
|
|
|
2019-11-18 14:04:51 +00:00
|
|
|
let error;
|
|
|
|
return this.transporter.sendMail(options).catch(err => {
|
|
|
|
error = err;
|
|
|
|
|
|
|
|
throw err;
|
|
|
|
}).finally(async() => {
|
|
|
|
await db.rawSql(`
|
2021-09-20 12:32:15 +00:00
|
|
|
INSERT INTO vn.mail (receiver, replyTo, sent, subject, body, status)
|
2021-04-27 08:29:09 +00:00
|
|
|
VALUES (?, ?, 1, ?, ?, ?)`, [
|
|
|
|
options.to,
|
2021-07-22 06:39:15 +00:00
|
|
|
options.replyTo,
|
2021-04-27 08:29:09 +00:00
|
|
|
options.subject,
|
|
|
|
options.text || options.html,
|
|
|
|
error && error.message || 'Sent'
|
|
|
|
]);
|
2019-11-18 14:04:51 +00:00
|
|
|
});
|
2019-09-30 11:02:11 +00:00
|
|
|
}
|
2019-01-22 08:55:35 +00:00
|
|
|
};
|