brunch

Firestore + Functions 메일 보내기

Firebase 만세

by 세컨드스페이스

구글 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. 세컨드스페이스

https://secondspace.kr


keyword
매거진의 이전글SNS 로그인 개발 알쓸신잡