Firebase 만세
구글 Firebase의 Firestore의 트리거를 이용해서 특정 값이 변경되었을때 메일을 발송하는 방법에 대해서 알아보겠습니다.
nodemailer를 이용하여 smtp 메일 발송을 할 수 있습니다.
지메일의 경우 보안이슈로 인해서 링크(https://myaccount.google.com/lesssecureapps )에서 '보안수준이 낮은 앱의 엑세스'를 허용해주어야 합니다.
functions를 이용하기 위해 firebase 에 로그인을 하고 초기화를 해줍니다.
firebase login
firebase init
functions/package.json 파일의 dependencies 에 nodemailer를 추가합니다.
"dependencies": {
"firebase-admin": "~6.0.0",
"firebase-functions": "^2.1.0",
"nodemailer": "^6.2.1"
},
이곳에 nodemailer를 추가하여야 firebase functions 에서 해당 모듈을 사용할 수 있습니다.
functions를 배포할때 해당 모듈이 설치되게 됩니다.
firestore onCreate 트리거를 통해 메일을 발송합니다.
const nodemailer = require('nodemailer');
exports.sendMail = functions.firestore.document('문서경로').onCreate((snap, context) => {
const config = {
mailer: {
service: 'gmail',
host: 'localhost',
port: '465',
user: '계정',
password: '비밀번호',
},
};
const transporter = nodemailer.createTransport({
service: config.mailer.service,
auth: {
user: config.mailer.user,
pass: config.mailer.password,
},
});
const mailOptions = {
from : '보내는사람',
to : '받는사람',
subject : '제목',
text : '내용', //or html
};
try {
console.log('mail send');
transporter.sendMail(mailOptions, (err, res) => {
if (err) {
console.log('실패 : => ', err);
} else {
console.log('성공 : => ', res);
}
transporter.close();
});
} catch (error) {
console.error('메일 발송 에러 :', error);
}
})
메일의 경우 자주 발송되기 때문에 아래와 같이 오브젝트로 만들어놓고 사용하면 편합니다.
const nodemailer = require('nodemailer');
const config = {
mailer: {
service: 'gmail',
host: 'localhost',
port: '465',
user: '계정',
password: '패스워드',
},
};
module.exports = {
sendMail: (from, to, subject, text) => {
const transporter = nodemailer.createTransport({
service: config.mailer.service,
auth: {
user: config.mailer.user,
pass: config.mailer.password,
},
});
const mailOptions = {
from,
to,
subject,
text,
};
try {
transporter.sendMail(mailOptions, (err, res) => {
if (err) {
console.log('실패 : => ', err);
} else {
console.log('성공 : => ', res);
}
transporter.close();
});
console.log('mail send');
} catch(error) {
console.error('메일 발송 실패 :', error);
}
return null;
}
}
트리거에서는 아래와 같이 사용하면 됩니다.
exports.sendMail = functions.firestore.document('문서경로').onCreate((snap, context) => {
let mail = require('./lib/mail');
mail.sendMail('보내는 이','받는 이','제목','본문')
});
잡담 / 개발 문화 / 일하는 방식 / 정보 공유 / 채용 문의 / 프로젝트 문의 등 어떠한 소통도 환영합니다 :)
오픈 슬랙 채널에 참여하기⬇️
https://join.slack.com/t/secondspace-open/shared_invite/zt-19q85dgid-6TCjbezQs4TTafBwT4BxAQ
written by. 세컨드스페이스