ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [NodeJS] nodemailer 모듈을 이용하여 메일 전송하는 법
    Server/NodeJS 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

    반응형

    댓글

Designed by Tistory.