Angularでお問い合わせフォームを作成中です。
下記のように、送信先、送信元、件名、本文をハードコードし、sendMailという関数をFirebaseにデプロイし、
フォームから送信ボタンを押すと問題なく動作するのは確認できたのですが、
JavaScript
1const functions = require('firebase-functions'); 2const admin = require('firebase-admin'); 3const nodemailer = require('nodemailer'); 4const cors = require('cors')({ origin: true }); 5admin.initializeApp(); 6 7 8let transporter = nodemailer.createTransport({ 9 host: '<ホスト>', 10 port: 465, 11 secure: true, 12 auth: { 13 user: '<アカウント名>', 14 pass: '<パスワード>', 15 }, 16}); 17 18 19exports.sendMail = functions.https.onRequest((req, res) => { 20 cors(req, res, () => { 21 22 const mailOptions = { 23 from: '<送信元メールアドレス>', 24 to: '<送信先メールアドレス2>', 25 subject: '件名', 26 text: '本文', 27 }; 28 29 return transporter.sendMail(mailOptions, (erro, info) => { 30 if (erro) { 31 return res.send({ error: 'error' }); 32 } 33 return res.send({ data: 'success' }); 34 }); 35 }); 36}); 37
下記のようにフォームの値jsonに変換しsendMailを実行すると、
Error: Response is missing data field.
というエラーメッセージをconsoleに表示します。
json
1{"email":"abc@gmail.com","message":"お問い合わせ用テキスト"}
JavaScript
1const functions = require('firebase-functions'); 2const admin = require('firebase-admin'); 3const nodemailer = require('nodemailer'); 4const cors = require('cors')({ origin: true }); 5admin.initializeApp(); 6 7 8let transporter = nodemailer.createTransport({ 9 host: '<ホスト>', 10 port: 465, 11 secure: true, 12 auth: { 13 user: '<アカウント名>', 14 pass: '<パスワード>', 15 }, 16}); 17 18 19exports.sendMail = functions.https.onRequest((req, res) => { 20 cors(req, res, () => { 21 22 const email = req.email; 23 const message = req.message; 24 25 const mailOptions = { 26 from: '<送信元メールアドレス>', 27 to: email, 28 subject: '件名', 29 text: message, 30 }; 31 32 return transporter.sendMail(mailOptions, (erro, info) => { 33 if (erro) { 34 return res.send({ error: 'error' }); 35 } 36 return res.send({ data: 'success' }); 37 }); 38 }); 39}); 40
不足な情報などありましら、おっしゃってください。
ご教示のほどよろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/03 16:36
2020/09/05 08:01