import htmlToText from 'html-to-text' import nodemailer from 'nodemailer' import fs from 'fs' import twig from 'twig' export default class EmailService { static getTransporter() { if (process.env.SMTP_HOST == undefined || process.env.SMTP_PORT == undefined) { throw new Error("Invalid SMTP config") } const config: any = { host: process.env.SMTP_HOST, port: parseInt(process.env.SMTP_PORT), secure: process.env.SMTP_SECURE == 'true', auth: { user: process.env.SMTP_USERNAME, pass: process.env.SMTP_PASSWORD, } } console.log(config) return nodemailer.createTransport(config) } static send(to: string, subject: string, templateName: string, templateParams: any): Promise { const viewPath: string = __dirname + '/../views/emails/' const data: Buffer = fs.readFileSync(viewPath + templateName + '.twig') const html: string = twig.twig({ data: data.toString() }).render(templateParams) const text: string = htmlToText.fromString(html, { wordwrap: 130 }) // for now replace every email by a predefined one console.info(to + ' replaced') to = "spamfree@matthieubessat.fr" return new Promise((resolve, reject) => { const config: any = { from: '"Forum des associations - Espace Condorcet Centre Social" ', to, subject, text, html } console.log(config.html) this.getTransporter().sendMail(config).then(info => { console.log(info) resolve() }).catch(err => { console.log(err) reject() }) }) } }