2016-09-07 5 views
1

node.js 응용 프로그램이 있고이 응용 프로그램에서 매일 오전 8시에 몇 명의 사람들에게 HTML 전자 메일을 보내려고합니다. 데이터베이스에서 일부 데이터를 가져 와서 부트 스트랩 대시 보드 템플릿에 표시하는 dashboard.ejs 파일이 있습니다. 이 dashboard.ejs를 응용 프로그램에서로드 할 때와 마찬가지로 데이터베이스의 모든 데이터와 스타일을 포함하는 HTML 전자 메일로이 dashboard.ejs를 보내려고합니다.nodejs 응용 프로그램에서 ejs 파일을 cronjob으로 보내는 방법

나는 cron 작업 준비 및 메일러 기능을 준비했습니다. 이메일로 dashboard.ejs 파일을 HTML로 보내면됩니다. 수행 할 수 있습니까? 그렇다면 모든 도움을 주시면 감사하겠습니다.

var mailer = require('express-mailer'); 
var CronJob = require('cron').CronJob; 
mailer.extend(app, { 
    from: '[email protected]', 
    host: 'smtp.gmail.com', 
    secureConnection: true; 
    port: 465, // port for secure SMTP 
    transportMethod: 'SMTP', 
    auth: { 
     user: '[email protected]', 
     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: '[email protected]', 
      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(); 

답변

4

기존의 익스프레스 앱에이 기능을 구현하지 않는 한이 방법을 권장하지 않습니다. 뷰 엔진보다 위의 예제에서 표현을 사용하는 것은 아닙니다.

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: '[email protected]', 
    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: '[email protected]', 
     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(); 
+0

감사합니다. @peteb. 나는 node.js에 완전히 익숙하지 않아 프레임 워크 나 작동에 대해 전혀 모른다. 귀중한 정보와 안내에 감사드립니다. 이 방법을 구현하고 작동하는지 알려 드리겠습니다. –

+0

당신의 방법은 매력처럼 작동하지만, 나는 또한 내 이메일에 CSS와 이미지를 가져와야합니다. 이 메일에 이미지/CSS를 삽입하는 방법에 대한 단서가 있습니까? –

+0

@BiswarupDass 이미지 임베드의 경우 base64 문자열로 변환하여 전송할 수 있습니다. – DevShadow