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 実装
以下の手順で実装をしました。
- Firebase Cloud Functions を初期化
- functions ディレクトリ内に、メール送信用の関数を作成
- 関数内で、Firebase Admin SDK を使用してメールを送信する処理を実装
- 送信元メールアドレス、受信先メールアドレス、件名、本文など、必要な情報を関数の引数として受け取る
- メール送信のトリガーを設定
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 の使い方を理解し、活用できるようになった気がします。
この記事が少しでも皆さんのお役に立てることを願っています。また、間違いや改善すべき点があれば、お気軽にご指摘ください。