如何从nodejs应用程序发送ejs文件作为HTML电子邮件作为cronjob

我有一个node.js应用程序,我想从这个应用程序每天在上午8点发送一个HTML电子邮件给几个人。 我有一个dashboard.ejs文件,从数据库获取一些数据,并将其显示在引导仪表板模板中。 我想将这个dashboard.ejs作为一个HTML电子邮件发送,包含数据库中的所有数据,并且样式与从应用程序加载这个dashboard.ejs时相同。

我准备好了cron作业并准备好了邮件程序。 我无法做的就是通过电子邮件发送dashboard.ejs文件为HTML。可以这样做吗? 如果是的话,任何帮助将不胜感激。

var mailer = require('express-mailer'); var CronJob = require('cron').CronJob; mailer.extend(app, { from: 'user@gmailcom', host: 'smtp.gmail.com', secureConnection: true; port: 465, // port for secure SMTP transportMethod: 'SMTP', auth: { user: 'user@gmail.com', pass: 'password' } }); var job = new CronJob('00 49 * * * *', function() { console.log('This runs on 49th second of every min every hour every day every month every year') app.mailer.send('dashboards/dashboard', { to: 'user2@gmail.com', subject: 'TEST EMAIL', message:'Hello World' }, function(err) { if(err) console.log('ERROR', err); } ); }, function() { console.log('This function is executed when job stops'); }, false, 'Asia/Kolkata' ); job.start(); 

除非你把这个build立到一个已经存在的快速应用程序,那么我会劝阻这种方法。 在上面的例子中,除了视图引擎之外,你没有真正使用express。

而不是使用快递,只需拿你需要的部分,并使用它。 您可以使用ejs直接使用ejs.renderFile()来生成带有数据的html。 然后使用nodemailer发送电子邮件( express-mail用来为你发送电子邮件)。

 const ejs = require('ejs'); const nodemailer = require('nodemailer'); const CronJob = require('cron').CronJob; const template = './dashboards/dashboard.ejs'; const transport = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 465, secure: true, auth: { user: 'user@gmail.com', pass: '*' } }); const job = new CronJob('00 49 * * * *', function() { let templateData = { name: 'Test Name' }; ejs.renderFile(template, templateData, (err, html) => { if (err) console.log(err); // Handle error console.log(`HTML: ${html}`); let mailOpts = { from: 'user@gmail.com', to: 'recipient', subject: 'EJS Test File', html: html }; transport.sendMail(mailOpts, (err, info) => { if (err) console.log(err); //Handle Error console.log(info); }); }); }, () => { console.log('This function is executed when job stops'); }, false, 'Asia/Kolkata' }; job.start();