Firebase 앱에서 SendGrid를 사용한 메일 전송 기능 실현
이번에는 백엔드에 Firebase를 사용할 때 등록 회원에게 메일을 보내는 방법을 정리했습니다.
※ 이번에는 SendGrid를 이용합니다.
※ Amazon SES나 Mailgun을 이용하는 경우는 메일 송신 부분을 다시 작성해 주십시오.
목차
전체 흐름
Firestore 등록 이벤트 시 Cloud Functions 실행
Firestore에 데이터를 등록할 때 Cloud Functions를 시작하려면 다음과 같이 index.js를 배포하여 구현할 수 있습니다.
import * as functions from 'firebase-functions';
export const sendInquiryMail = functions.firestore
.document('examples/{id}')
.onCreate(async (snap, context) => {
// 処理を記述
}
firebase의 초기 설정은 생략합니다.
firebase deploy
Cloud Functions에서 메일 서버에 요청 보내기
SendGrid를 사용하는 경우 API Key를 사용해야 합니다.
API Key는 SendGrid의 관리자 화면에서 만들 수 있습니다.
API Key는 환경별로 전환하고 싶거나 카드 관리하고 싶지 않기 때문에 Firebase의 환경 데이터에 저장합시다.
firebase functions:config:set sendgrid.apikey="xxxx"
설정한 환경 데이터를 바탕으로 SendGrid의 API를 호출합니다.
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(functions.config().sendgrid.apikey); // 設定した環境データを取得
// メール送信
const msg = {
to: '[email protected]',
from: '[email protected]',
subject: 'example subject',
text: 'example body',
};
await sgMail.send(msg);
이것으로 메일 송신 처리를 실현할 수 있었습니다.
Firestore 데이터를 기반으로 메일 내용을 구축
메일을 보낼 때 관련 데이터를 기반으로 메일 내용을 만들 수 있습니다.
Firebase의 AdminSDK를 사용하여 등록 데이터 이외의 데이터를 검색할 수 있습니다.
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
const colRef = db.collection('other');
const snapshots = await colRef
.where('id', '==', 'xxxx')
.limit(1)
.get();
const other = snapshots.docs[0].data();
Firebase Authentication에서 회원 정보 얻기
await admin
.auth()
.getUser('xxxx')
결국 다음과 같은 코드로 메일 전송을 실현할 수 있었습니다.
import * as functions from 'firebase-functions';
export const sendInquiryMail = functions.firestore
.document('examples/{id}')
.onCreate(async (snap, context) => {
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
const data = snap.data();
const user await admin
.auth()
.getUser(data.user_id)
const colRef = db.collection('other');
const snapshots = await colRef
.where('id', '==', data.other_id)
.limit(1)
.get();
const other = snapshots.docs[0].data();
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(functions.config().sendgrid.apikey);
const msg = {
to: user.email,
from: '[email protected]',
subject: 'example subject',
text: `example body. ${other.body}`,
};
await sgMail.send(msg);
});
Reference
이 문제에 관하여(Firebase 앱에서 SendGrid를 사용한 메일 전송 기능 실현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/decoch/items/ff77aaa5d15acf1c89a5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)