Node.js에서 Nodemailer를 통해 Google계정으로 메일 보내기

2023. 4. 9. 17:46Mobile/Android

작성자알 수 없는 사용자

728x90
반응형

안녕하세요. 마플입니다.
이번에는 Node.js에서 Google 계정을 이메일을 보내야할 때 어떻게 해야하는지 알아 볼거에요. 

Firebase Functions에서 작동하는 환경에서 진행을 했으니 참고해주세요.


우선 설치해줄 라이브러리는 'nodemailer' 이에요.

밑의 명령어를 실행시켜 설치를 합니다. 

$ npm install nodemailer

밑의 코드를 firebase functions에서 작동할 곳에 넣어 줍시다.

data는 to, subject, text로 메일의 수신자, 제목, 본문을 담고 있는 key-value 객체로 전달 받습니다.

nodemailer.createTransport을 통해 메일을 어디로 보낼지 인증 정보를 담습니다.

transporter.sendMail을 통해 메일을 포장해서 보냅니다.

.then과 .catch로 성공과 실패 시 처리를 해주면 됩니다.

const functions = require('firebase-functions');
const nodemailer = require('nodemailer');
... do other import

... other http function

exports.sendEmail = functions.https.onCall((data, context) => {
  
    // 사용자가 로그인되었는지 확인합니다.
    if (!context.auth) {
      throw new functions.https.HttpsError('unauthenticated', '인증되지 않은 사용자입니다.');
    }
  
    // 이메일 수신자, 제목, 본문을 가져옵니다.
    const { to, subject, text } = data;
  
    // 이메일 보내기 설정
    const transporter = nodemailer.createTransport({
      service: 'Gmail',
      auth: {
        user: 'your Email', // 발신자 이메일 주소
        pass: 'app password or password' // 발신자 이메일 비밀번호
      }
    });
  
    // 이메일 보내기
    return transporter.sendMail({
      from: 'your Email', // 발신자 이메일 주소
      to,
      subject,
      text
    })
    .then(() => {
      console.log('이메일이 성공적으로 전송되었습니다.');
      return { message: '이메일이 성공적으로 전송되었습니다.' };
    })
    .catch((error) => {
      console.error('이메일 전송 중 오류가 발생했습니다.', error);
      throw new functions.https.HttpsError('internal', '이메일을 보내는 중 오류가 발생했습니다.');
    });
  
});

이메일 전송 시 오류가 발생하는 경우가 있는데,
" Error: Invalid login: 534-5.7.9 Application-specific password required."

이런 에러 메시지가 뜨면 구글 계정에서 2단계 인증까지 되어 있어 단순 이메일, 패스워드으로는 로그인이 되지 않는 상태입니다. 
그럼 이제 이것을 해결하기 위해서 앱 비밀번호를 설정을 해야합니다.

Google 계정관리> 보안> 2단계 인증> 앱 비밀번호 로 이동하여 앱 비빌번호를 생성합니다.

앱 비밀번호의 생성할 앱 및 기기를 선택하고 생성하게 되면 앱 비빌번호가 나타납니다. 

해당 비밀번호를 node.js 코드의 비밀번호 넣는 곳에 대입 해주면 됩니다.

이것으로 node.js에서 nodemailer를 사용하여 Google계정을 통해 Gmail을 보내는 것을 해보았습니다.

밑에는 앱 비밀번호에 대한 참고 자료 입니다.

 


https://support.google.com/accounts/answer/185833?hl=ko 

 

앱 비밀번호로 로그인 - Google 계정 고객센터

도움이 되었나요? 어떻게 하면 개선할 수 있을까요? 예아니요

support.google.com

 

728x90
반응형