Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何从nodejs应用程序将ejs文件作为HTML电子邮件作为cronjob发送_Node.js_Ejs_Nodemailer - Fatal编程技术网

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

Node.js 如何从nodejs应用程序将ejs文件作为HTML电子邮件作为cronjob发送,node.js,ejs,nodemailer,Node.js,Ejs,Nodemailer,我有一个node.js应用程序,我想每天早上8点从这个应用程序向几个人发送一封HTML电子邮件。我有一个dashboard.ejs文件,它从数据库中获取一些数据,并在引导仪表板模板中显示它们。我想将此dashboard.ejs作为HTML电子邮件发送,其中包含数据库中的所有数据,样式与从应用程序加载此dashboard.ejs时相同 我已经准备好cron作业和mailer函数。我所不能做的就是通过电子邮件以HTML格式发送dashboard.ejs文件。可以这样做吗?如果有,我们将不胜感激 va

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

我已经准备好cron作业和mailer函数。我所不能做的就是通过电子邮件以HTML格式发送dashboard.ejs文件。可以这样做吗?如果有,我们将不胜感激

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();

除非你将其构建到一个已经存在的express应用程序中,否则我不鼓励这种方法。在上面的示例中,除了视图引擎之外,您并没有真正使用express

不要使用Express,只需使用您需要的部件即可。您可以直接使用
ejs
,使用生成的数据生成html。然后使用发送电子邮件(这是
特快专递
用于为您发送电子邮件)


除非你将其构建到一个已经存在的express应用程序中,否则我不鼓励这种方法。在上面的示例中,除了视图引擎之外,您并没有真正使用express

不要使用Express,只需使用您需要的部件即可。您可以直接使用
ejs
,使用生成的数据生成html。然后使用发送电子邮件(这是
特快专递
用于为您发送电子邮件)


谢谢@peteb。我对node.js完全是新手,我不知道它的框架或工作原理。感谢您宝贵的信息和指导。我会实现这个方法,并让你知道它是否有效。你的方法非常有效,但我也需要在我的电子邮件中获得css和图像。关于如何将图像/css嵌入此邮件,您有任何线索吗?@BiswarupDass For image embed您可以将其转换为base64字符串并以这种方式发送。@DevShadow您不应该在电子邮件中嵌入图像,您应该链接到它们。嵌入的图像可能会导致电子邮件被标记为垃圾邮件或恶意软件。对于CSS,您应该使用内联样式。谢谢@peteb。我对node.js完全是新手,我不知道它的框架或工作原理。感谢您宝贵的信息和指导。我会实现这个方法,并让你知道它是否有效。你的方法非常有效,但我也需要在我的电子邮件中获得css和图像。关于如何将图像/css嵌入此邮件,您有任何线索吗?@BiswarupDass For image embed您可以将其转换为base64字符串并以这种方式发送。@DevShadow您不应该在电子邮件中嵌入图像,您应该链接到它们。嵌入的图像可能会导致电子邮件被标记为垃圾邮件或恶意软件。对于CSS,您应该使用内联样式。
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();