salix/print/core/smtp.js

50 lines
1.6 KiB
JavaScript
Raw Normal View History

2019-01-22 08:55:35 +00:00
const nodemailer = require('nodemailer');
2019-10-29 06:46:44 +00:00
const config = require('./config');
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) {
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);
options.to = config.app.senderEmail;
2019-09-30 11:02:11 +00:00
}
2019-01-22 08:55:35 +00:00
let error;
return this.transporter.sendMail(options).catch(err => {
error = err;
throw err;
}).finally(async() => {
const attachments = [];
for (let attachment of options.attachments) {
const fileName = attachment.filename;
const filePath = attachment.path;
// if (fileName.includes('.png')) return;
if (fileName || filePath)
attachments.push(filePath ? filePath : fileName);
}
const fileNames = attachments.join(',\n');
await db.rawSql(`
INSERT INTO vn.mail (receiver, replyTo, sent, subject, body, attachment, status)
VALUES (?, ?, 1, ?, ?, ?, ?)`, [
2021-04-27 08:29:09 +00:00
options.to,
options.replyTo,
2021-04-27 08:29:09 +00:00
options.subject,
options.text || options.html,
fileNames,
2021-04-27 08:29:09 +00:00
error && error.message || 'Sent'
]);
});
2019-09-30 11:02:11 +00:00
}
2019-01-22 08:55:35 +00:00
};