LoginSignup
21
19

More than 3 years have passed since last update.

VercelにデプロイしたNextアプリからSendGridを使ってメールを送信する

Last updated at Posted at 2020-07-30

はじめに

JavaScript界隈ではすっかり地位を確立したJAMSTACK。

僕も大好きです。

最近の休日は、ほぼ全てJAMSTACK開発に費やしています。
静的ホスティングサービスはコストパフォーマンスに優れたものも多く、ブログや簡単なショッピングサイトなどをJAMSTACKでサクッと作ってしまうことで得られるメリットも多いと思います。

ブログやショッピングサイトにはメールが必須ですよね。

とはいえ、まだまだ参考文献が少ないのが現状です。。
今回は、NextプロジェクトをVercelにデプロイした際に、どのようにSendGridと連携してメールを送信するかを書きたいと思います。

前提条件

既に構築済みのNextプロジェクトに組み込むことを想定しているので、以下の環境構築は既に完了済みと想定して話を進めていきます。

  • SendGridのアカウント作成(APiキーの作成も完了済み)
  • Next.jsの基本的な構築

Vercelへのデプロイは各自に任せます。
メールの送信テストは npm run dev でも検証可能です。

SendGridモジュールのインストール

プロジェクト配下で以下のコマンドを実行して必要なモジュールをインストールします。

$ npm i @sendgrid/mail

サーバーレス関数の作成

静的ホスティングサービスってPOST出来ないんでしょ?

という意見を耳にすることがありますが、可能です。

Vercelでは任意の関数をサーバレス機能として展開することができ、バックエンドの言語のHTTPリクエストを取得し、応答を提供することができます。

サーバーレス関数を使うことで、ユーザー認証、フォーム送信、データベースクエリ、カスタムSlackコマンドなどを処理することが可能です。

まず /pages/api 配下に send.js というファイルを作成します。

send.js
const sgMail = require('@sendgrid/mail')

export default async function(req, res) {
  sgMail.setApiKey('SendGridで作成したAPIキー')

  const { email, message } = req.body

  const content = {
    to: email,
    from: '任意のメールアドレス(実現するもの)',
    subject: 'メールのタイトルです',
    text: message,
    html: `<p>${message}</p>`
  }

  try {
    await sgMail.send(content)
    res.status(200).send('Message sent successfully.')
  } catch (error) {
    console.log('ERROR', error)
    res.status(400).send('Message not sent.')
  }
}

これでメールの送信処理の作成が完了しました。

メールを送信する

あとは任意のファイルの中で作成したサーバーレス関数にPOSTするだけでメールが送信できます。
必要に応じて async/await などの非同期処理を行ってください。

index.js
import fetch from 'node-fetch';

fetch('/api/send', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        email: 'test@exsample.com'
        message: 'Test mail.'
      })
    })

最後に

まだまだ開発が活発に行われており、変化に柔軟に対応していかなければならないNext.jsですが、本当に面白い技術なので、皆さんも是非触ってみてください。

この記事が、不安や懸念を振り払うお手伝いになれたら幸いです。

参考文献

Create and Deploy a SendGrid-Powered Next.js and Node.js Contact Form with ZEIT Now

21
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
19