salix/print/core/smtp.js

74 lines
2.1 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);
},
2022-11-09 13:51:30 +00:00
async send(options) {
options.from = `${config.app.senderName} <${config.app.senderEmail}>`;
const env = process.env.NODE_ENV;
const canSend = env === 'production' || !env || options.force;
2023-06-21 12:17:25 +00:00
if (!canSend || !config.smtp.auth.user) {
2022-11-09 13:51:30 +00:00
const notProductionError = {message: 'This not production, this email not sended'};
await this.mailLog(options, notProductionError);
return Promise.resolve(true);
2019-09-30 11:02:11 +00:00
}
2023-06-21 12:17:25 +00:00
if (!env)
options.to = config.app.senderEmail;
2023-06-21 12:17:25 +00:00
let res;
let error;
try {
res = await this.transporter.sendMail(options);
} catch (err) {
error = err;
throw err;
} finally {
2022-11-09 13:51:30 +00:00
await this.mailLog(options, error);
}
return res;
2022-11-09 13:51:30 +00:00
},
async mailLog(options, error) {
const attachments = [];
if (options.attachments) {
for (let attachment of options.attachments) {
const fileName = attachment.filename;
const filePath = attachment.path;
if (fileName.includes('.png')) continue;
if (fileName || filePath)
attachments.push(filePath ? filePath : fileName);
}
2022-11-09 13:51:30 +00:00
}
2022-01-18 12:15:42 +00:00
2022-11-09 13:51:30 +00:00
const fileNames = attachments.join(',\n');
await db.rawSql(`
2023-06-22 05:49:35 +00:00
INSERT INTO vn.mail
SET receiver = ?,
replyTo = ?,
sent = ?,
subject = ?,
body = ?,
attachment = ?,
status = ?`, [
2022-11-09 13:51:30 +00:00
options.to,
options.replyTo,
2023-06-22 05:49:35 +00:00
error ? 2 : 1,
2022-11-09 13:51:30 +00:00
options.subject,
options.text || options.html,
fileNames,
2023-06-22 05:49:35 +00:00
error && error.message || 'OK'
2022-11-09 13:51:30 +00:00
]);
2019-09-30 11:02:11 +00:00
}
2022-11-09 13:51:30 +00:00
2019-01-22 08:55:35 +00:00
};