Gatsbyプロジェクトにnodemailer & netlify functionでcontactフォームを実装。

ディレクトリー

root
 ├── functions
 |     └── send.js
 ├── netlify.toml
 |
 ...その他Gatsbyデータ省略...
  • Gatsbyのプロジェクトにfunctionフォルダ📁そ作成し、適当な名前でjsファイルそ新しく作成する。メールを送る機能をつける予定なのでsend.jsにしたapiのurlは.netlify/functions/sendになる。

netlify設定

  • netlify.tomlのファイルを作成しでビルド設定をする。
./netlify.toml
[build]
  command = 'npm run build'
  functions = "functions"
  publish = 'public'

netlify cli

  • netlify cliインストールでapiのローカルサーバーを立ち上げることができる。
$ npm i netlify-cli

npm run devでapiが叩けるのlocalhost8888が立ち上がる

package.json
"scripts": {
   "dev": "netlify dev"
  ... 省略 ...
}

send.js設定

  • nodemailerをインスツール
$ npm i nodemailer

[https://nodemailer.com/about/:embed:cite]

  • POSTを受ける設定
function/send.js
const nodemailer = require("nodemailer")

exports.handler = async (event, context) => {

  // POSTだけする設定
  if (event.httpMethod !== "POST") {
    return { statusCode: 405, body: "Method Not Allowed" }
  }

  //POSTするBody
  const params = JSON.parse(event.body)

  const transporter = nodemailer.createTransport({
    service: "gmail",// メールサービス
    auth: {
      user: `admin address`,
      pass: `admin pass`
    },
  })

  let option = {
    from: process.env.MAIL_ADMIN,
    subject: `Gatsby Contact From Send Test`,
    to: `admin address`,
    text: `
      POSTするインプットの値
    `,
  }

  transporter.sendMail(Option, (error, info) => {
    sendMailresult(error, info)
  })

  function sendMailresult(error, info) {
    if (error) {
      console.log("Error Occurs", error)
      res.send("error")
    } else {
      console.log("Email sent:", info.respons)
      res.send("success")
    }
  }
  return {
    statusCode: 200,
    body: `success`,
  }
}

関連記事

NEXTJS & node expressでapiサーバー構築をしてみた

© 2021 Thunder Fury. All rights reserved.