100%를 한번에 바꾸는건 어려워도 1%를 100번 바꾸는건 쉽다.

생각정리 자세히보기

개발/Node.js (NestJS)

[Node.js] nodemailer를 이용한 메일 전송

dc-choi 2021. 12. 21. 20:44
반응형

프로젝트에서 nodemailer를 사용을 했다... 4시간이나 삽질을 해서 다음에는 해매지않도록 기록을 해두려고 한다.

 

 

먼저 패키지를 설치해야한다.

npm i -s nodemailer

 

패키지를 설치하면 package.json이 다음처럼 변경된다.

{
  "name": "back",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "morgan": "~1.9.1",
    "mysql2": "^2.3.3",
    "nodemailer": "^6.7.2",
    "sequelize": "^6.12.0-beta.3",
    "sequelize-auto": "^0.8.8",
    "sequelize-cli": "^6.3.0"
  }
}

 

메일 모듈을 생성하기전, config 폴더에 따로 계정정보를 저장한다.

{
	"user": "user",
	"pass": "pass"
}

 

설치하고 난 후 mail.js에 메일 모듈을 생성한다.

const nodemailer = require('nodemailer');
const senderInfo = require('../config/email.json');
// 메일발송 객체
let mailSender = {
  // 메일발송 함수
  sendGmail(param) {
    let transporter = nodemailer.createTransport({
      service: 'gmail',   // 메일 보내는 곳
      prot: 587,
      host: 'smtp.gmlail.com',  
      secure: false,  
      requireTLS: true ,
      auth: {
        user: senderInfo.user,  // 보내는 메일의 주소
        pass: senderInfo.pass   // 보내는 메일의 비밀번호
      }
    });
    // 메일 옵션
    let mailOptions = {
      from: senderInfo.user, // 보내는 메일의 주소
      to: param.toEmail, // 수신할 이메일
      subject: param.subject, // 메일 제목
      text: param.text // 메일 내용
    };
    
    // 메일 발송    
    transporter.sendMail(mailOptions, (error, info) => {
      if (error) {
        console.log(error);
      } else {
        console.log('Email sent: ' + info.response);
      }
    });

  }
}

module.exports = mailSender;

메일을 여러 Router에서 사용할 수도 있기 때문에 별도의 mail.js 모듈을 생성했다.

 

공통 모듈을 만들고난 후의 사용 예제는 다음과 같다.

const express = require('express');
const router = express.Router();

let mailer = require('../auth/mail');

router.post('/mail', async(req, res) => {
  const { email }  = req.body;
  const min = 111111;
  const max = 999999;
  const ranNum = Math.floor(Math.random() * (max - min - 1)) + min;

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

    subject: `[slack_clone]인증 관련 메일 입니다`,   // 메일 제목

    text: `오른쪽 숫자 6자리를 입력해주세요 : ${ranNum}`                // 메일 내용
  };

  mailer.sendGmail(emailParam);

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

module.exports = router;

 

할일이 많이 남아있다... 좀만 더 힘내자...

반응형