Search
▪️

Sending Emails

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처리로 운영하는 것은 큰 서비스를 운영할 때는 좋지 않다. 동 시간에 많은 유저에게 메일을 보내야 하면, 그 유저에게 메일을 모두 보내는 동안 기다리고 있어야 하기 때문이다. 따라서 여러 방법이 있겠지만, 특정 시간 주기를 두고 정해진 인원 수에 따라 메일을 보내는 방법도 유용하게 쓰인다.