Node.js에서 Nodemailer를 통해 Google계정으로 메일 보내기
안녕하세요. 마플입니다.
이번에는 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