🐡

備忘録05 Flutter データ登録時、メールで通知送信

2024/07/02に公開

概要

独学でチャット形式で質問し合うwebアプリを作成したが、
質問を作成した時にプッシュ通知は実装できなかったので(ここは知識不足かもですが)、メールを送信する機能を追加実装した。その流れを記事に残す。

事前準備

メール送信機能を実装するためには、以下の事前準備が必要

・Firebase プロジェクトの作成および Firebase Database の設定
・Firebase CLI のインストール

npm install -g firebase-tools

・Cloud Functions の初期化

firebase init functions

・配信元のメール設定

$ firebase functions:config:set email.from="メールアドレス" email.pass="アプリパスワード"

・送信元メールアドレスの設定
今回は以下記事を参考
https://www.isoroot.jp/blog/6491/

やる作業

  1. Firebase Cloud Functions を初期化
  2. functions ディレクトリ内に、メール送信用の関数を作成
  3. 関数内で、Firebase Admin SDK を使用してメールを送信する処理を実装
  4. 送信元メールアドレス、受信先メールアドレス、件名、本文など、必要な情報を関数の引数として受け取る
  5. メール送信のトリガーを設定
index.js
// Cloud Functions でのメール送信機能の実装
exports.sendEmail = functions.firestore.document("/questions/{questionId}")
    .onCreate(async (snap, context) => {
        const questionData = snap.data();
        const answerId = questionData.answerId;

        // 質問者のメールアドレスを取得
        const userSnapshot = await admin.firestore()
            .collection("users")
            .doc(answerId)
            .get();
        const userData = userSnapshot.data();
        const toEmail = userData.email;

        // メールの内容を設定
        const subject = "新しい質問があります";
        const message = `
            ${questionData.askerName} さんから新しい質問がありました。\n
            質問内容: ${questionData.question}\n
            ログインして回答してください。\n
            https://example.com/login
        `;

        // メール送信オプションの設定
        const mailOptions = {
            from: functions.config().email.from,
            to: toEmail,
            subject: subject,
            text: message
        };

        // メール送信
        try {
            await transporter.sendMail(mailOptions);
            console.log("メールが送信されました");
        } catch (error) {
            console.error("メール送信中にエラーが発生しました:", error);
        }
    });

最後に

今回、Cloud Functions を使用して、Firestore のドキュメントが作成されるというトリガーから Gmail へのメール送信までを実装してみた。

Discussion