똑같은 삽질은 2번 하지 말자
Firebase Trigger Email 사용해보기 본문
개요
Firebase Trigger Email 사용해 메일 보내기 기능 구축해보기(참고로 유료)
1. Extensions 의 Trigger Email 설치
2. Trigger Email 설치과정
Cloud Functions location: | Firebase Trigger Email 의 Cloud Functions 을 배치하는 region |
SMTP connection URI: | 실제로 메일의 송신을 담당하는 서비스 URI |
Email documents collection: | 메일송신의 대상이 되는 데이터 컬렉션 -> 이 컬렉션에 데이터가 들어오면 메일이 송신된다. |
Default FROM address: | 발신 메일에 송신자로서 기재되는 메일 주소 (나중에 sendgrid의 설정하고 연관되는 부분) |
Default REPLY-TO address: | 발신 메일에 회신처로 기재되는 메일 주소(선택사항) |
Users collection: | email의Document의 부가정보로써 유저정보를 사용하는 경우의 컬렉션(선택사항) |
Templates collection: | 메일 템플릿을 사용할 때 그 템플릿을 저장하는 컬렉션(선택사항) |
SMTP connection URI 이외 다른 부분들은 Firebase 내에서 작성가능하다.
(SMTP connection URI 는 실제로 메일을 송신하는 서비스 URI이다.)
나는 SendGrid라는 서비스를 이용했다.
3. SMTP URI 생성하기
Email Delivery Service
Delivering your transactional and marketing emails through the world's largest cloud-based email delivery platform. Send with confidence.
sendgrid.com
SendGrid 의 SMTP connection URI는 우선 start free로 계정을 만든뒤 console창으로 들어가 준다.
그럼 왼쪽 사이드바의 Email API > Integration Guide > SMTP Relay 에서 API키를 작성하는게 가능하다.
API키를 작성화면의 각각의 값들을 조합한게 SMTP URI가 된다.
아마 왠만하면 password 부분 빼고 필자와 똑같을것이다.
// smtps://[user]:[password]@[server]
smtps://apikey:hogehoge@smtp.sendgrid.net
Trigger Email의 설정을 완료했다면 테스트로 email이라는 collection을 만들어 실제로 이메일이 보내지는지 테스트를 해보자
뭔가 에러가 터졌다..!
Error: Message failed: 550 The from address does not match a verified Sender Identity. Mail cannot be sent until this error is resolved.
Visit https://sendgrid.com/docs/for-developers/sending-email/sender-identity/ to see the Sender Identity requirements
보낸사람이 확인되지 않았다? 라는 에러메시지 인거같아 구글링 해보면 SendGrid에서 Domain Authentication 이나 Siggle Sender Vertfication으로 설정하면 간단하게 되는거 같았다.
domain설정은 뭔가 귀찮아보여서 Firebase Trigger Email에서 등록한 Default FROM address을 Single Sender로 등록했다.
그랬더니 5분뒤 다시 해봤는데 이메일이 보내졌다. 실제로 gmail에도 와있었는데 스팸메일? 로 분류되어있었다.ㅠ
이제 콘솔창에서의 설정은 끝났다.
그리고 우선 앱의 상황에 따라 다르겠지만, 이 이메일 보내기 기능은 email이라는 collection에 데이터가 들어가는 순간 Trigger되서 이메일이 발송된다. 즉 mail을 보낼려면 collection에 데이터를 집어 넣어야 한다는건데 그럼 인증이라는 절차가 필요해진다.
하지만 Firebase에서는 외부 사용자들에게 Firebase의 기능을 쉽게 사용할 수 있게끔 로그인 없이 간단한 인증방식을 제공하는데
그게 firebase-admin이라는 sdk이다.
https://firebase.google.com/docs/auth/admin
Admin Auth API 소개 | Firebase Documentation
의견 보내기 Admin Auth API 소개 Firebase Admin SDK를 사용하면 자체 서버를 Firebase 인증과 통합할 수 있습니다. 또한 Firebase Admin SDK로 사용자를 관리하거나 인증 토큰을 관리할 수 있습니다. Admin SDK에는
firebase.google.com
Firebase-admin 설정
프로젝트 개용의 톱니바퀴를 클릭해서 서비스 계정 이라는 탭에 접근한다.
잠깐, 근데 Firebase-admin은 node환경이 없으면 실행할 수 없게 되어 있는거 같다.
나는 static으로 배포를 하고 있기때문에 배포환경에 node가 깔려있지 않으므로..admin을 이용하는건 패스
그럼 mail collection을 인가된 사용자가 아니더라도 insert 되도록 할것인가..
어라? 생각해보니 이미 initializeApp해서 firestore를 쓸 수 있게 해놓았다. 단지 내가 .env 파일을 잘못 설정했었네 하하하하
설정은 이하 참조
https://heewon26.tistory.com/308
Firebase 사용해보기 2 (데이터 넣어보기, plugin type 정의, nuxt에서 firebase Type 쉽게쓰기 9.ver 대응)
이전 단계에서 기본적인 셋팅이 끝났으니 실제로 데이터를 넣어보자 우선 내가 쓰는 Firebase 요소들 (Realtime은 안쓴다.) 1. Nuxt + Composition API + Firebase에서 type추론이 잘 되는 firebase 플러그인화 h..
heewon26.tistory.com