Server/NodeJS

[NodeJS] nodemailer 모듈을 이용하여 메일 전송하는 법

백엔드 규니 2020. 11. 2. 10:28
728x90
반응형

이번 글에서는 NodeJS - Express를 이용해서 메일 전송을 하는 법에 대해 정리해보려 한다.  nodemailer는 node서버에서 메일을 보낼 수 있는 메일 전송 모듈인데 이것을 이용하려 한다.

 

 

프로젝트 세팅

Express 프로젝트이름
ex) Express NodeJS_mailer
npm install                 
npm install nodemailer  (모듈 설치)

그러면 위와 같이 프로젝트 구조를 볼 수 있을 것이다. (config, mail.js는 필자가 만든 것이다.) 이제 config 폴더와 routes 아래에 mail.js를 만들어보자.  

 

 

1. config/senderInfo.json 

먼저 config 폴더 아래 json형태의 파일을 하나 만들어주자. 해당 파일에는 보내는 이메일, 비밀번호를 입력할 것이기 때문에 반드시 .gitignore에 추가해두자. (혹시나 github에 올린다면,,)

{
  "user": "본인의 이메일",
  "pass": "이메일 비밀번호"
}

위와 같이 본인이 메일을 보낼 이메일과 그 이메일의 비밀번호를 입력해주면 된다.

 

 

2. mail.js

이번에는 mail 모듈을 만들 것이다. 

const nodemailer = require('nodemailer');
const senderInfo = require('../config/senderInfo.json');
// 메일발송 객체
const mailSender = {
  // 메일발송 함수
  sendGmail: function (param) {
    var transporter = nodemailer.createTransport({
      service: 'gmail',   // 메일 보내는 곳
      prot: 587,
      host: 'smtp.gmlail.com',  
      secure: false,  
      requireTLS: true ,
      auth: {
        user: senderInfo.user,  // 보내는 메일의 주소
        pass: senderInfo.pass   // 보내는 메일의 비밀번호
      }
    });
    // 메일 옵션
    var mailOptions = {
      from: senderInfo.user, // 보내는 메일의 주소
      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);
      }
    });

  }
}

module.exports = mailSender;

사용법은 위와 같다. 공식문서에서 보면 자세하게 알 수 있지만 여기서 같이 볼 곳은 service에 보내는 이메일을 적어주면 된다. 필자는 Gmail을 사용할 것이기 때문에 Gmail을 적었다. 그리고 auth 안에 config 에서 만들어주었던 이메일 주소와 비밀번호를 입력해주면 된다.

 

 좀 더 코드에 대해 자세히 알고 싶다면 공식문서에서 확인해보자. 

 

 

index.js

const express = require('express');
const router = express.Router();
const mailer = require('./mail');

router.get('/mail', (req, res) => {
  const { email }  = req.body;

  let emailParam = {
    toEmail: email,     // 수신할 이메일

    subject: 'New Email From Gyunny',   // 메일 제목

    text: `Gyunny 회원님!`                // 메일 내용
  };

  mailer.sendGmail(emailParam);

  res.status(200).send("성공");
})

module.exports = router;

클라이언트로 부터 메일 주소를 받아서 받은 메일 주소에게 메일을 보낼 것이다. 

 

위와 같이 포스트맨을 이용하여 Request Body에 메일을 담아서 요청을 보냈다.

 

그러면 위와 같은 것이 콘솔에 찍히는 것을 확인할 수 있다. 이것은 구글 계정에 대한 로그인이 되지 않았다는 오류인데, 이 오류의 해결은 여기를 클릭해서 "사용함"으로 바꾸면 된다. 테스트가 끝나면 다시 "사용안함"으로 바꿔놓자. (혹시나,,)

 

그러면 위와 같이 메일이 제대로 도착한 것을 확인할 수 있다. 

 

 

 

Reference

반응형