[Node] Node로 정해진 시간마다 이메일 전송(Schedule, Mailer 사용)
오늘은 Node를 사용해서 정해진 시간마다 메일을 전송해보는 시스템을 만들어보겠다.
node-schedule와 nodemailer 패키지를 통해서 기능을 개발하며 서버는 express를 이용해보겠다.
npm install node-schedule nodemailer express --save
exprees 서버를 작성해보자.
아래와 같이 app.js를 작성하고
app.js
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
node app.js
Example app listening on port 3000!
콘솔에 해당 문자가 찍이면 정상적으로 서버가 올라간것이다.
브라우저 통해서 확인하고 싶으면 localhost:3000을 입력해보면 Hello World!가 찍혀있는걸 볼 수 있다.
이제는 일단 node-schedule와 nodemailer을 import 시킨 후
스케줄러가 정상작동하는지 테스트 해볼것이다.
Cron-style Scheduling
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ │
│ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
│ │ │ │ └───── month (1 - 12)
│ │ │ └────────── day of month (1 - 31)
│ │ └─────────────── hour (0 - 23)
│ └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)
Cron-style로 시간을 나타낼수 있으면 하나의 예제를 작성해보겠다.
// 5초 간격으로 실행되는게 아닌 5초에 실행한다.
var j = schedule.scheduleJob('5 * * * * *', function () {
console.log('매분 5초마다 등장');
});
app.js에 해당 함수를 작성 한뒤 다시 서버를 실행해보면
3분 정도 경과한 뒤 아래와 같이 콘솔에 찍혀있다.
Example app listening on port 3000!
매분 5초마다 등장
매분 5초마다 등장
매분 5초마다 등장
이제는 정해진 시간마다 어떠한 일을 할 수 있게 됐다.
그러면 이제 nodemailer을 통해 이메일 전송하는 작업을 만든다음
해당 스케줄러에 작업을 추가해준다면 우리가 원하던 작업이 완료될수 있을거같다.
Gmail을 이용하여 메일을 보낼건데 gmail 보안이 낮은 앱 허용 권한을 해주어야 한다.
https://myaccount.google.com/lesssecureapps?pli=1
로그인이 되어있다면 링크를 따라가면 바로 설정 할 수 있을것이다.
이제 app.js를 다시한번 수정해주자.
var mailSender = {
// 메일발송 함수
sendGmail: function (param) {
var transporter = mailer.createTransport({
service: 'gmail',
prot: 587,
host: 'smtp.gmlail.com',
secure: false,
requireTLS: true,
auth: {
user: '보내는ID@gmail.com',
pass: '패스워드',
},
});
// 메일 옵션
var mailOptions = {
from: '보내는ID@gmail.com',
to: param.toEmail, // 수신할 이메일
subject: param.subject, // 메일 제목
text: param.text, // 메일 내용
};
// 메일 발송
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
},
};
// 보내는 사람은 같아도 받을ID는 하나가 아니므로 따로 빼주었다.
var emailParam = {
toEmail: '받은ID@gmail.com',
subject: '메일 테스트',
text: '메일 내용',
};
메일 설정 끝났으니 스케줄러에 정해진 시간마다 해당 함수가 실행되게 해보자
var j = schedule.scheduleJob('5 * * * * *', function () {
mailSender.sendGmail(emailParam);
});
이제 모든 작업 끝났다. node app.js를 통해 서버를 다시 실행시켜보자
그리고 5분정도 지난뒤 메일을 확인해보면 아래와 같이 매분마다 메일이 도착한걸 볼 수 있다.