salix/print/core/email.js

88 lines
2.6 KiB
JavaScript
Raw Normal View History

2019-10-29 06:46:44 +00:00
const path = require('path');
2019-01-22 08:55:35 +00:00
const smtp = require('./smtp');
2020-05-22 13:20:55 +00:00
const config = require('./config');
2019-10-29 06:46:44 +00:00
const Component = require('./component');
const Report = require('./report');
2019-01-22 08:55:35 +00:00
if (!process.env.OPENSSL_CONF)
process.env.OPENSSL_CONF = '/etc/ssl/';
2019-10-29 06:46:44 +00:00
class Email extends Component {
constructor(name, args) {
super(name);
this.args = args;
}
get path() {
return `../templates/email/${this.name}`;
}
2019-10-31 11:43:04 +00:00
async getSubject() {
2020-05-22 13:20:55 +00:00
const component = await this.component();
let locale = this.args.auth.locale;
if (this.args.recipientId)
locale = await component.getLocale(this.args.recipientId);
2019-10-31 11:43:04 +00:00
2020-05-22 13:20:55 +00:00
const messages = this.locale.messages;
const userTranslations = messages[locale];
if (!userTranslations) {
2019-10-31 11:43:04 +00:00
const fallbackLocale = config.i18n.fallbackLocale;
2020-05-22 13:20:55 +00:00
return messages[fallbackLocale].subject;
2019-10-31 11:43:04 +00:00
}
2020-05-22 13:20:55 +00:00
return userTranslations.subject;
2019-10-31 11:43:04 +00:00
}
2019-10-29 06:46:44 +00:00
async send() {
const instance = this.build();
const rendered = await this.render();
const attachments = [];
const getAttachments = async(componentPath, files) => {
for (file of files) {
const fileCopy = Object.assign({}, file);
if (fileCopy.cid) {
const templatePath = `${componentPath}/${file.path}`;
const fullFilePath = path.resolve(__dirname, templatePath);
fileCopy.path = path.resolve(__dirname, fullFilePath);
} else {
const reportName = fileCopy.filename.replace('.pdf', '');
const report = new Report(reportName, this.args);
fileCopy.content = await report.toPdfStream();
}
attachments.push(fileCopy);
}
};
if (instance.components) {
const components = instance.components;
for (let componentName in components) {
const component = components[componentName];
2019-10-31 11:43:04 +00:00
const componentPath = `./components/${componentName}`;
2019-10-29 06:46:44 +00:00
await getAttachments(componentPath, component.attachments);
}
}
if (this.attachments)
await getAttachments(this.path, this.attachments);
2019-10-31 11:43:04 +00:00
const localeSubject = await this.getSubject();
2019-10-29 06:46:44 +00:00
const options = {
to: this.args.recipient,
2020-05-20 14:23:53 +00:00
replyTo: this.args.auth.email,
2019-10-31 11:43:04 +00:00
subject: localeSubject,
2019-10-29 06:46:44 +00:00
html: rendered,
attachments: attachments
};
return smtp.send(options);
}
}
module.exports = Email;