Framework/NodeJS

[NodeJS] 메일 전송 기능 구현 - Nodemailer + Gmail

CHOIDR 2021. 6. 27. 13:51

Nodemailer는 기본적으로 Node.js 사용자가 메일 전송 기능구현을 위해서 기본적으로 사용하는 모듈이라고 합니다.

https://nodemailer.com/about/

 

0. Gmail권한 설정하기

 

* 추후 기능 구현중 접근 관련 오류가 발생할 수 있으므로 여기 링크에서 '보안 수준이 낮은 앱 허용'을 사용으로 바꿔줘야 합니다. 

그리고 내 구글 계정에 대한 액세스를 허용해줘야 하기 때문에 

https://accounts.google.com/DisplayUnlockCaptcha 해당 링크에서 '계속'을 눌러서 허용해줘야 합니다.

 

1. nodemailer 모듈 설치

$ npm install nodemailer

 

2. nodemailer 모듈 불러오기

const nodemailer = require('nodemailer');

 

3. config 설정

const transporter = nodemailer.createTransport({
    service: 'gmail',
    host: 'host 메일 주소',
    port: 587,
    secure: false,
    auth: {
        user: '메일 주소',
        pass: '메일 비밀번호',
    },
});

 

4. 메일 전송 기능 구현

const info = await transporter.sendMail({
            from: `"Airbnb clone" <${process.env.NODEMAILER_USER}>`,	// 보내는 사람
            to: getUserEmail[0].email,	// 받는 사람
            subject: 'Airbnb Reservation Complete info',	// 제목
            text: '',	// 내용
            html: `
                    <h1>Reservation Complete</h1><br>
                    <b>Room Name: ${checkRooms[0].title}</b><br>
                    <b>Room Location: ${checkRooms[0].locationName}</b><br>
                    <b>Date: ${checkReservations[0].startDate} ~ ${checkReservations[0].endDate}</b><br>
                `,	// html로 표현한 내용
        });

 

저는 에어비앤비 기능 구현 시 사용했기에 위와 같이 코드를 작성했었습니다.

html 부분에 내용을 작성한다면 text 부분은 작성하지 않아도 됩니다.

 

 

- 전체 코드

const nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({
    service: 'gmail',
    host: 'host 메일 주소',
    port: 587,
    secure: false,
    auth: {
        user: '메일 주소',
        pass: '메일 비밀번호',
    },
});

const info = await transporter.sendMail({
            from: `"Airbnb clone" <${process.env.NODEMAILER_USER}>`,	// 보내는 사람
            to: getUserEmail[0].email,	// 받는 사람
            subject: 'Airbnb Reservation Complete info',	// 제목
            text: '',	// 내용
            html: `
                    <h1>Reservation Complete</h1><br>
                    <b>Room Name: ${checkRooms[0].title}</b><br>
                    <b>Room Location: ${checkRooms[0].locationName}</b><br>
                    <b>Date: ${checkReservations[0].startDate} ~ ${checkReservations[0].endDate}</b><br>
                `,	// html로 표현한 내용
        });

 

기능 구현이 완료된다면 아래 사진과 같이 정상적으로 메일이 오는 것을 확인하실 수 있습니다.

 

 

참고자료

https://devlog-wjdrbs96.tistory.com/234

https://velog.io/@josworks27/Back-end-Node.js%EC%97%90%EC%84%9C-%EB%A9%94%EC%9D%BC-%EC%A0%84%EC%86%A1%ED%95%98%EA%B8%B0-feat.-Nodemailer-Gmail