How Does Sending Emails Work?
•
Node.js Server에서 사용자로 메일을 보내고 싶을 때, Node.js와 Express.js에 큰 오해가 있다.
•
이 두 가지들은 Server-Side의 Logic을 작성하기 위한 Language이자 Runtime Framework일 뿐이다. 즉, Node.js로 단순히 Mailing Server를 짠하고 만들 수는 없는 것이다.
•
무슨 말이냐 함은, Mailing을 처리하는 것은 단순히 Request를 받아서 Response로 내보내는 것과는 완전히 다르다는 것이다. 완전히 다른 기술이 쓰이고, 화면 뒤에서는 Request, Response를 처리하던 것과는 완전히 다른 방식으로 처리된다.
•
따라서 실제로 Mailing Service를 하기 위해서, 직접 Mailing Service를 구현한다는 것은 불가능에 가깝다.
•
굉장히 복잡한 작업이기 때문이다. 일단 직접 구현하기 위해서는 Protocol에 대한 이해도가 굉장히 높아야 한다. 또한 동 시간대에 전송되는 어마어마한 양의 Mail들도 동시에 처리할 수 있어야 한다. 더군다나 보안에도 문제가 없어야 한다.
•
이러한 이유로 Email Task를 처리하기 위해서는 Third Party Mail Server를 이용해야 한다.
** 실제로 대규모 Web Application에서도, 심지어 Udemy에서도 직접 Mailing Server를 운영하지 않는다.
** 대체로 AWS와 같은 Third Party Server를 쓴다.
Using SendGrid
•
프로젝트 용으로 걸맞는 무료 플랜의 Third Party Server로는 SendGrid도 괜찮다. (하루 100건 이하)
•
SendGrid 이외에도 MailChimp, AWS, SCS Google for Node Mailing도 괜찮다.
•
Third Party Package를 설치한다. 이 Package를 통해서 Node.js가 Mail을 보낼 수 있도록 한다.
npm install —save nodemailer
•
또한 Mailer로써 SendGrid를 이용하기 위해 추가 Third Party Package를 설치한다.
npm install —save nodemailer-sendgrid-transport
Using Nodemailer to Send and Email
•
메일을 보낼 작업을 할 Script에서 nodemailer Package를 Import한다. 그리고 nodemailer를 이용하는 Mail Service Package도 Import한다.
const nodemailer = require('nodemailer')
const sendgridTransport = require('nodemailer-sendgrid-transport')
•
두 Package의 Import 후에 두 Package에 대해서 Initialize를 해줘야 한다. nodemailer의 createTransport() Method를 통해서 어떻게 이메일을 전송하게 될지 설정한다. 또한 해당 인자로 sendgridTransport Initializer를 호출하고, Initializer의 인자로는 api_user, api_key를 Object로 받는다. api_key만 받아도 된다.
const transporter = nodemailer.createTransport(
sendgridTransport({
auth: {
api_user: ,
api_key: ,
}
})
);
•
이와 같이 Initialize도 끝나면 transporter.sendMail() Method를 이용하여 메일을 보낼 수 있다.
•
Method의 인자로는 JSON 데이터를 받으며, Key로는 to, from, subject, html을 String Value로 받는다.
•
transporter.sendMail() Method를 Block처리로 운영하는 것은 큰 서비스를 운영할 때는 좋지 않다. 동 시간에 많은 유저에게 메일을 보내야 하면, 그 유저에게 메일을 모두 보내는 동안 기다리고 있어야 하기 때문이다. 따라서 여러 방법이 있겠지만, 특정 시간 주기를 두고 정해진 인원 수에 따라 메일을 보내는 방법도 유용하게 쓰인다.