前提・実現したいこと
Firebase Storageにアップロードがあったタイミングで、該当するファイルを添付したメールを送信する仕組みを作ろうとしています。
メールの送信部分をFireabse Cloud Functionsから行おうとしているのですが、上手く動いていません。
原因と解決方法をご教示いただけますと幸いです。
発生している問題・エラーメッセージ
Fireabse Cloud Functionsにデプロイした関数は実行されている様です。
実行時に次のログが出力されています。
ダウンロード完了:xxx メール送信準備開始 Function終了
メール送信処理周りの次のログは出力されませんでした。
メール送信準備完了。メール送信開始 エラーあるいは「メール送信完了」
該当のソースコード
TypeScript
1import * as functions from "firebase-functions"; 2import * as admin from "firebase-admin"; 3import * as path from "path"; 4import * as os from "os"; 5import * as fs from "fs"; 6 7const nodemailer = require("nodemailer"); 8const app = admin.initializeApp(); 9 10export const test = functions.storage.object().onFinalize(async (object) => { 11 const fileBucket = object.bucket!; 12 const filePath = object.name!; 13 const fileName = path.basename(filePath); 14 const bucket = app.storage().bucket(fileBucket); 15 const tempFilePath = path.join(os.tmpdir(), fileName); 16 17 await bucket.file(filePath).download({destination: tempFilePath}); 18 functions.logger.log("ダウンロード完了: ", tempFilePath); 19 20 const transport = nodemailer.createTransport({ 21 service: "gmail", 22 auth: { 23 user: "xxx@gmail.com", 24 pass: "xxxxxxxx", 25 } 26 }); 27 28 functions.logger.log("メール送信準備開始"); 29 exports.sendMail = functions.https.onCall((data, context) => { 30 const mail = { 31 from: "xxx@gmail.com", 32 to: "yyy@gmail.com", 33 subject: "Firebase Cloud Functionsからテスト送信", 34 text: "テスト本文", 35 }; 36 37 functions.logger.log("メール送信準備完了。メール送信開始"); 38 transport.sendMail(mail, (error: any, info: any) => { 39 fs.unlinkSync(tempFilePath); 40 if (error) { 41 functions.logger.log(error); 42 } else { 43 functions.logger.log("メール送信完了"); 44 } 45 }); 46 }); 47 48 return functions.logger.log("Function終了"); 49});
試したこと
ネットで情報を探しながらプログラムを組んでみたのですが、知識不足から原因が特定できていません。
exports.sendMail
に代入している処理全般が動いていない様なので、exports.sendMail
を実行する方法が分かれば解決する様な気がしています。
補足情報(FW/ツールのバージョンなど)
package.jsonの内容は次の通りです。
{ "name": "functions", "scripts": { "build": "tsc", "serve": "npm run build && firebase emulators:start --only functions", "shell": "npm run build && firebase functions:shell", "start": "npm run shell", "deploy": "firebase deploy --only functions", "logs": "firebase functions:log" }, "engines": { "node": "14" }, "main": "lib/index.js", "dependencies": { "firebase-admin": "^9.8.0", "firebase-functions": "^3.14.1", "nodemailer": "^6.6.1" }, "devDependencies": { "firebase-functions-test": "^0.2.0", "typescript": "^3.8.0" }, "private": true }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/31 03:01