Open1

Flutter メール送信機能

ばっしーばっしー

はじめに

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

事前準備

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

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

$ npm install -g firebase-tools

・Cloud Functions の初期化

$ firebase init functions

・配信元のメール設定

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

Function 実装

以下の手順で実装をしました。

  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 へのメール送信までを実装してみました。最初は少し難しく感じましたが、少しずつ Functions の使い方を理解し、活用できるようになった気がします。

この記事が少しでも皆さんのお役に立てることを願っています。また、間違いや改善すべき点があれば、お気軽にご指摘ください。