Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ポートフォリオサイトのお問い合わせフォームをSendgrid + microCMSで作成したお話

Nobuyoshi
December 09, 2021

ポートフォリオサイトのお問い合わせフォームをSendgrid + microCMSで作成したお話

ポートフォリオサイトのお問い合わせフォームをSendgrid + microCMSで作成したお話します。

site: https://uemu-engineer.com/

Nobuyoshi

December 09, 2021
Tweet

More Decks by Nobuyoshi

Other Decks in Programming

Transcript

  1. 自己紹介 Name:うえむー  フロントエンドエンジニア Job Skill:html / css / scss /

    javascript / jQuery / vue.js / php etc... Private Skill:next.js / React.js / nuxt.js / micro cms / go etc... Hobby:プログラミング学習・ボードゲーム・麻雀・筋トレ SNS・ブログサイト Twitter::https://twitter.com/uemuragame5683 ブログサイト:https://nu-blogsite.net/ ポートフォリオサイト:https://uemu-engineer.com/
  2. SendGridでフリープランでできること メール送信API ・SMTPリレー ・WebAPI(HTTPS) マーケティングキャンペーン機能 上限2,000件 通数上限 12,000通/月 日本語ドキュメント 日本語での無料サポート

    配信結果の把握・サプレッション管理 配信状況の確認(到達 /再送/エラー等) 開封・クリックの測定 配信停止管理 独自ドメイン利用 etc...
  3. SendGridをインストール npm install --save @sendgrid/mail package.json
 "dependencies" : { ...

    "@sendgrid/mail" : "^7.4.7", ... },
 command
 sendgrid/mailをnpmでインストールします。 package.jsonにsendgrid/mail をインストールされていることを 確認できます。
  4. envを設定 NS_GRID_API_KEY='SG.XXXXXXX' [email protected] next.config.js
 module.exports = { env: { NS_GRID_API_KEY:

    process.env.NS_GRID_API_KEY , NS_FROM: process.env.NS_FROM, }, ... }; .env
 発行したAPIKeyを入力します 送信先のアドレスを入力します next.config.jsファイルを開き envの設定を追加します
  5. api/send.tsx export default function handler(req, res) { if(req.method === 'POST')

    { const sgMail = require('@sendgrid/mail'); sgMail.setApiKey(process.env.NS_GRID_API_KEY); const msg = { to: req.body.email, from: process.env.NS_FROM, subject: 'お問合せありがとうございました。', text: req.body.name + '様<br><br>平素より、Nu-。。。' + req.body.body, html: req.body.name + '様<br><br>平素より、Nu-。。。' + req.body.body, }; (async () => { try { await sgMail.send(msg); } catch (error) { console.error(error); if (error.response) { console.error(error.response.body) } } })(); } res.status(200) } トランザクションメールを送信す るために、send.tsxファイルを生 成します。 その後、先ほど設定した APIキー を利用して実装します。
  6. contact.tsx const 関数 = async e => { e.preventDefault(); const

    datas = { email: email, name: name, title: title, body: body }; axios({ method: "post", url: "https://XXXXXXXXXXXXXXXXXXXXXXXX.io/api/v1/XXXXXXXX", data: datas, headers: { "Content-Type": "application/json", "X-MICROCMS-API-KEY": process.env.XXXXXXXXXXXXXXX } }) .then(() => { const contact_form = document.getElementsByClassName("c-contact__conform"); const complete_cont = ReactDOMServer.renderToStaticMarkup(<Complete />); contact_form[0].insertAdjacentHTML('afterbegin', complete_cont); axios( { method: "POST", url:'/api/send', data: datas, headers: { "Content-Type": "application/json", }, } ).then(() => { }) }) .catch(err => { console.log(err); }); } import * as React from 'react'; export default function Component() { return ( <> <div className='c-contact__complete'> <p> XXXXXXX </p> </div> </> ); } お問い合わせ内容確認を送信した時のイベント処理のコード でaxiosを利用して実装しました。 まず、microcmsでPOST送信して、送信成功したらトランザク ションメールを送信します。