ディレクトリー
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`,
}
}