[express.js] nodemailer

김민재·2024년 4월 4일

express.js

목록 보기
28/39
post-thumbnail

nodemailer란?

  • 이메일 기능이다. express에서 제공해주는 라이브러리

  • 외 AWS SES 서비스, Mailgum 등 많은 서비스가 더 있다.

    nodemailer 사용법

    1. npm i nodemailer
      nodemailer 라이브러리를 설치한다.
    2. 메일을 전송할 때 보여줄 템플릿을 만든다.
    • mail.js: nodemailer를 이용한 메일 전송 로직 구현

    • goobye_template: 회원탈퇴 HTML 템플릿을 JS로 함수로 구현

    • welcome_template: 회원가입 환영 HTML 템플릿을 JS로 함수로 구현

      const welcome = (data) => {
       return `
         <!DOCTYPE html>
         <html>
         <head>
         <title>반갑습니다.</title>
         </head>
         <body>
         <div>감사합니다.</div>
         </bdoy>
         </html>`;
      };
      
      module.exports = welcome;
      
    1. mail.js에 nodemailer 로직 구현

        const mailer = require("nodemailer");
        const welcome =     require("./welcome_template");
        const goodbye = require("./goodbye_template");
       
        require("dotenv").config();
      
        // html template를 이용한 로직
        const getEmailData = (to, template) => {
          let data = null;
      
       switch (template) {
         case "welcome":
         data = {
             from: "보내는 사람 이름",
           to,
           subject: `hello `,
           html: welcome(),
         };
         break;
       case "goodbye":
         data = {
           from: "보내는 사람 이름",
           to,
           subject: `Goodbye `,
           html: goodbye(),
         };
         break;
       default:
         data;
        }
        return data;
       };
      
       // nodemailer를 이용한 메일 보내기 로직
       const sendMail = (to,  type) => {
        const transporter = mailer.createTransport({
          service: "Gmail",
          auth: {
          // mail을 이용할 구글 계정과
          // 앱 비밀번호
         user: process.env.GOOGLE_USER,
           pass: process.env.GOOGLE_APP_PASSWORD,
          },
        });
      
        // 템플릿 함수를 mail 변수에 담음
        const mail = getEmailData(to, type);
      
        // nodemailer를 이용해서 mail 보내기
        transporter.sendMail(mail, (error, response)   => {
       if (error) {
         console.log(error);
       } else {
         console.log("email sent successfully");
       }
      
       transporter.close();
        });
      };
      
       //  회원가입 시 메일 보내기 위해 
       // export - user.router.js
       module.exports = sendMail;
       
    • nodemailer와 template을 불러온다.

    • template을 이용한 로직을 구현한다.

    • nodemailer를 이용해 이메일을 보내는 함수를 구현한다.

    1. 이제 회원가입 시에 이메일을 보낼 거라 회원가입 함수에 와서 함수를 완성시킨다.

      const User = require("../models/user.model");
      const sendMail = require("../mail/mail");
      
      usersRouter.post("/signup", async (req, res) => {
      // user 객체 생성
      const user = new User(req.body);
      
      // db에 user 저장
      try {
       await user.save();
       // 이메일 보내기
       await sendMail(user.email,  "welcome");
       return res.status(200).json({
         success: true,
       });
      } catch (error) {
       console.error(error);
      }
      });
       ```
       
    • await sendMail(user.email, "welcome");
      • user.email: 어느 유저에게 보낼 것인지
      • "welcome": 어떤 템플릿을 사용할지
  • 메일이 성공적으로 전송 됐으면 이메일함을 확인해보면 된다.

profile
개발 경험치 쌓는 곳

0개의 댓글