分からないこと
Next.jsでお問い合わせフォームを作成しました。
ローカルで送信するとエラーなく送信されるが、本番環境NetlifyにデプロイするとStatus Code:500でエラーになります。
やったこと
Next.js
Next.jsではnodemailerを使用
api/contact.tsに
import { createTransport } from 'nodemailer' import { NextApiRequest, NextApiResponse } from 'next' export default function sendmail(req: NextApiRequest, res: NextApiResponse) { const htmlMsg = req.body.message.replaceAll('\n', '<br>') const transporter = createTransport({ port: 465, host: 'smtp.gmail.com', auth: { user: process.env.MAIL_USER, pass: process.env.MAIL_PASS, }, secure: true, }) const toHostMailData = { from: process.env.MAIL_USER, to: process.env.MAIL_USER, subject: `【お問い合わせ】${req.body.name}様より`, text: req.body.message + ' | Sent from: ' + req.body.email, html: ` <p>お問い合わせがありました</p> <p>【名前】</p> <p>${req.body.name}</p> <p>【メッセージ】</p> <p>${htmlMsg}</p> <p>【メールアドレス】</p> <p>${req.body.email}</p> `, } // 送信する transporter.sendMail(toHostMailData, function (err) { if (err) console.log(err) }) res.send('success') }
フロントで配置した送信を押すと
pages/contact/index.jsxで
const handleSubmit = (e) => { // console.log('送信中') const data = { name, email, message, } fetch('/api/contact', { method: 'POST', headers: { Accept: 'application/json, text/plain, */*', 'Content-Type': 'application/json', }, body: JSON.stringify(data), }) .then((res) => { if (res.status === 200) { // console.log('送信が成功しました') setSubmitted(true) setName('') setEmail('') setMessage('') } }) .catch((err) => { console.log(err) }) }
Gmailアカウント
- 2段階認証on
- アプリパスワード設定
Netlify
Build & deploy / Environment / Environment variables に
MAIL_USER・・・gmailメールアドレス
MAIL_PASS・・・アプリパスワード
を設定
解決したいこと
なぜローカル環境だとお問い合わせ送信が可能だが、Netlifyにデプロイし本番環境だとエラーがでるのか分かりません。
その理由と解決方法を教えていただきたいです。
どうかよろしくお願いいたします。

あなたの回答
tips
プレビュー