質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Angular

Angularは、JavaScriptフレームワークです。AngularJSの後継であり、TypeScriptベースで実装されています。機能ごとに実装を分けやすく、コードの見通しが良いコンポーネント指向です。

Q&A

1回答

1664閲覧

Firebase+Angularで作成したお問い合わせフォーム送信時にエラーが発生し送信できない

balls

総合スコア40

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Angular

Angularは、JavaScriptフレームワークです。AngularJSの後継であり、TypeScriptベースで実装されています。機能ごとに実装を分けやすく、コードの見通しが良いコンポーネント指向です。

0グッド

0クリップ

投稿2020/09/03 07:14

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

不足な情報などありましら、おっしゃってください。
ご教示のほどよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

  const email = req.email; const message = req.message;

こちらですが、

  const email = req.body.email; const message = req.body.message;

とすると動作すると思います。

投稿2020/09/03 07:27

編集2020/09/03 07:28
Arahabica

総合スコア209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

balls

2020/09/03 16:36

ご回答ありがとうございます。 試してみたのですがダメでした。 送信先メールアドレスをハードコーディング、メッセージのみお問い合わせフォームから受け取るようにした場合、メールは送信できますが、メッセージが空っぽの状態です。 データが受け取れていないようです。 フロントエンド側も問題ないように思いますが、何かアドバイスあればお願いします。
Arahabica

2020/09/05 08:01

あれ、なんででしょう? console.log(req) としてみて、reqの中のどこかにデータが入ってないか確認してみてください。 console.log(JSON.stringify(req, null, ' ')) の方がいいかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問