title | emoji | type | topics | published | published_at | |||||
---|---|---|---|---|---|---|---|---|---|---|
Firebase FunctionsからGメールを送信してみる |
🔛 |
tech |
|
true |
2023-07-22 20:25 |
- FirestoreのドキュメントをonCreateトリガーにして、Functions(Node.js)を走らせる
- Functionsでドキュメントに含まれるメールアドレス宛にGメールを送信する
- (小話)先日参加したハッカソンで、アプリ開発中に詰まったポイントだったので備忘録も兼ねて。
- Firebase(Functions, Firestore)の初期設定
- GoogleアカウントのMFA有効化
デフォルトでfunctions/index.jsが作成されるので、そちらにソースコードを記述します。
const functions = require('firebase-functions'); //ver: "firebase-functions": "^4.3.1"
const admin = require('firebase-admin'); //ver: "firebase-admin": "^11.8.0"
const nodemailer = require('nodemailer'); //ver: "nodemailer": "^6.9.3"
admin.initializeApp();
// Firestoreのresultドキュメント配下のすべてを対象にonCreateトリガーでFunctionsを動かす
exports.sendEmail = functions.firestore.document('/result/{documentId}')
.onCreate(async (snap, context) => {
// トリガー対象のドキュメントからデータを取得する
const resultData = snap.data();
const to = resultData.email;
// メール内容
const subject = 'メールのタイトルです。';
const message = 'メールの内容です。';
const from = process.env.MAIL;
const pass = process.env.PASS;
try {
// SMTPトランスポータの作成
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: from,
pass: pass
}
});
// メールオプションの設定
const mailOptions = {
from: from,
to: to,
subject: subject,
text: message
};
// メール送信
const info = await transporter.sendMail(mailOptions);
console.log('メールが送信されました:', info.response);
} catch (error) {
console.error('メールの送信中にエラーが発生しました:', error);
};
});
メール送信時に、送信元のGoogleアカウントを認証する必要があるので、アプリパスワードを生成します。
「普通のメールアドレスとPWじゃだめなの?」
と思われた方、はい、僕です。(Outlookはできたから余計時間かかったんだよなぁ...)
サードパーティ製のアプリからGメールを送信する場合、Googleのセキュリティ仕様により通常のPWでは認証できません。詳しくはこちら そのためのアプリパスワードというわけです。
Googleアカウント管理画面より、セキュリティ > 2段階認証プロセス > アプリ パスワード から以下を設定します。
- アプリを選択: メール
- デバイスを選択: その他 (名前を入力) → 何でも良いですが、今回は
Firebase Functions
にしておきましょう。
するとこんな感じでアプリパスワードを生成できるのでコピーします。 ![](https://storage.googleapis.com/zenn-user-upload/e4b6e2a97229-20230722.png =500x)
functions配下に.env
を生成してください。
(Git管理する場合は.gitignoreに追加するのをお忘れずに!)
MAIL="メールアドレス"
PASS="先ほどのアプリパスワード"
CLIでfirebase deploy --only functions
(またはfirebase deploy) コマンドを入力してデプロイし、Deploy complete!
とレスポンスがあったらあとは動かすだけです!
Firestoreのコンソールを開き、以下のキャプチャを参考にresultコレクションへデータを入れます。
![](https://storage.googleapis.com/zenn-user-upload/97a3a4427d00-20230722.png =500x)
![](https://storage.googleapis.com/zenn-user-upload/5dffde6b29c2-20230722.png =500x) 値には送信先メールアドレスを入力します
数秒待つと・・
![](https://storage.googleapis.com/zenn-user-upload/8b59e5855ee3-20230722.png =500x)
来ました!これで完了です!