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

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

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

Email(電子メール)とは、ネットワークを介してメッセージを送受信するシステム。インターネット上で利用するメールを、Emailと呼ぶ場合が多いです。 インターネットの普及に伴い、現在では一般的なサービスとなっています。文字の他にも、画像、音声、プログラムなどを送受信することが可能です。

Sendmail

Sendmailは、インターネットで電子メールを送受信するサーバソフトウェア(MTA)です。ユーザーが送信したメールを受け、他メールサーバへ引き渡しバケツリレー式に配送したり、届いたメールをユーザーが受け取るまでの間保管するといった働きをします。

Netlify

Netlifyは、静的サイトを超高速でホスティングできる高機能なWebサービスです。WordPressといった動的処理を必要としないLPなどの静的Webサイトを公開することが可能。カスタムドメイン設定や無料SSL証明書などの多くの機能を無料で使用できます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

600閲覧

netlify functionsでnodemailerを使用するとmail本文がundefindeで返ってくるのを解消したいです

junya.k

総合スコア0

Email

Email(電子メール)とは、ネットワークを介してメッセージを送受信するシステム。インターネット上で利用するメールを、Emailと呼ぶ場合が多いです。 インターネットの普及に伴い、現在では一般的なサービスとなっています。文字の他にも、画像、音声、プログラムなどを送受信することが可能です。

Sendmail

Sendmailは、インターネットで電子メールを送受信するサーバソフトウェア(MTA)です。ユーザーが送信したメールを受け、他メールサーバへ引き渡しバケツリレー式に配送したり、届いたメールをユーザーが受け取るまでの間保管するといった働きをします。

Netlify

Netlifyは、静的サイトを超高速でホスティングできる高機能なWebサービスです。WordPressといった動的処理を必要としないLPなどの静的Webサイトを公開することが可能。カスタムドメイン設定や無料SSL証明書などの多くの機能を無料で使用できます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2022/03/22 06:37

わからないこと

netlifyにnext.jsで作ったお問い合わせフォームを作成しています。
netlify functions で nodemailerを使用しメールを送っています。
メールの送受信はできsubject(string data)は表示されているのですが、本文が「undefined」で返ってきます。
netlify functionsでのeventが何を受け取っているのかがわかりません。

できていること

メール自体は送受信できていることから.env関連は問題ないと思っています。
bodyの値がわかっていないことが原因だと考えています。

やってみたこと

  • フロントでの実装

入力した内容をuseStateを使用し収容

送信ボタンにhandleSubmitを使用し下記の通り

javascript

1const [name, setName] = useState('') 2const [email, setEmail] = useState('') 3const [message, setMessage] = useState('') 4 5const handleSubmit = async (e) => { 6 e.preventDefault() 7 const data = { 8 name, 9 email, 10 message, 11 } 12 const request = new XMLHttpRequest() 13 request.open('POST', '/.netlify/functions/contact') 14 request.send(JSON.stringify(data)) 15 16 setSubmitted(true) 17 setName('') 18 setEmail('') 19 setMessage('') 20 21 } 22
  • netlify functions での実装

javascript

1import nodemailer from 'nodemailer' 2 3exports.handler = async function (event, context, callback) { 4 const body = JSON.parse(event.body) 5 const html = `<div style="margin: 20px auto;">${body.body}</div>` 6 let transporter = nodemailer.createTransport({ 7 host: 'smtp.gmail.com', 8 port: 465, 9 secure: true, 10 auth: { 11 type: 'OAuth2', 12 user: process.env.MAIL_LOGIN, 13 clientId: process.env.CLIENT_ID, 14 clientSecret: process.env.CLIENT_SECRET, 15 refreshToken: process.env.REFRESH_TOKEN, 16 accessToken: process.env.ACCESS_TOKEN, 17 }, 18 }) 19 console.log(event.body) 20 try { 21 let toHostMailData = await transporter.sendMail({ 22 from: process.env.MAIL_LOGIN, 23 to: process.env.MAIL_LOGIN, 24 subject: `【お問い合わせ】があります`, 25 text: body.body, 26 html: html, 27 }) 28 console.log(toHostMailData) 29 callback(null, { statusCode: 200, body: JSON.stringify(toHostMailData) }) 30 } catch (error) { 31 callback(error) 32 } 33}

教えていただけると助かります。
よろしくお願いいたします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問