본문 바로가기
  • 포르쉐타고싶다
인포테인먼트 - development/node.js

[node.js] g suite 계정에 nodeMailer 적용

by 지오ㄴl 2020. 4. 27.

 

1. 배경

 

어플리케이션에 은근 안쓰이는 곳이 없는 기능 중에 하나가

유저에게 메일을 보내는 것이다.

 

이는 사용자를 인증하기 위한 곳, 예를 들어

임시비밀번호 발급

비밀번호 변경,

이벤트 결과 발표 등등

계정이 요구되는 어플리케이션에 필수로 들어가있다.

 

Node.js에서는 이 기능을

NodeMailer를 사용해 구현할 수 있는데

송신하는 업체메일의 도메인이 어디냐에따라 설정을 달리 해줘야 한다.

 

그리고 메일을 송신하는 계정은 일반적인 gmail, naver 등 보편적인 웹메일이 아닌

업체마다 갖고있는 대표 도메인으로 만든 이메일을 그 송신자로 한다.

 

그리고 그 도메인의 메일을 관리하게 도와주는 툴 중 구글에서 만든 것이

g suite이고

이것을 사용하면 회사의 도메인의 메일을 관리할 수 있다.

 

그리고 g suite 도메인 메일로 유저에게 메일을 보내기 위한

NodeMailer 설정방법은 gmail과 다른 방식이길래 

 

그 방법을 찾아 적어보려고 한다. 

 


 

2. 개념

 

기본적으로 나의 gmail의 메일로 유저의 메일에

NodeMailer를 사용하는 방법은

var nodemailer = require('nodemailer');

sendNewPwFunc: (email, pw) => {
        try {
            var transporter = nodemailer.createTransport(smtpTransport({
                service: 'gmail',
                host: 'smtp.gmail.com',
                auth: {
                    user: '[gmail]',
                    pass: '[google 비밀번호]'
                }
            }));
            var mailOptions = {
                from: '[gmail]',
                to: email,
                subject: '[제목 텍스트]',
                html: '<h1>00에서 새로운 비밀번호를 보내드립니다.~~~~</h1> <h2>' + pw + '</h2>'
            };
            transporter.sendMail(mailOptions, function (error, info) {
                if (error) {
                    console.log(error);
                    return false;
                } else {
                    console.log('Email sent: ' + info.response);
                    console.log("새로운 비밀번호가 발송되었습니다.");
                    return true;
                }
            });

            return true;
        } catch (err) {
            console.log(err);
            throw new Error(err);
        }
    }

 


 

3. 사용방법

 

먼저 g suite의 계정에 보안 설정을 하고

key들이 들어있는 json파일을 받아야 한다.

 

참고 ->

https://medium.com/@imre_7961/nodemailer-with-g-suite-oauth2-4c86049f778a

 

 

여기서 받은 [g suite key json파일]을 가지고 아래와 같이 함수를 사용하면 된다

var nodemailer = require('nodemailer');

sendNewPwMail: async (email, pw) => {

  try {

    const key = require('[g suite key json파일 path]');
    const EMAIL_COMPANY = '[회사 도메인으로된 대표 이메일]';
    const EMAIL_USER = email;

    var start = async () =>{

      const transporter = nodemailer.createTransport({
      host: 'smtp.gmail.com',
      port: 465,
      secure: true,

      auth: {
        type: 'OAuth2',
        user: EMAIL_COMPANY,
        serviceClient: key.client_id,
        privateKey: key.private_key
      }

  	});

    try {

      await transporter.verify();
      await transporter.sendMail({

        from: EMAIL_COMPANY,
        to: EMAIL_USER,
        subject: '[메일 제목]',
        html: `[내용]`

      });

      } catch(err) {
        console.log(err);
        throw new Error(err);
      }
    }

	start();

  } catch (err) {

    console.log(err);
    throw new Error(err);

  }

},

 

반응형

댓글