くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

SendGridでトランザクションメールを送る(Node.js)

SendGridを使ったメール配信を使ってみたので、
そのとき調べたときの備忘録。

マーケティングメールもあるけど、
とりあえず、トランザクションメールの送り方。

メールを送るためにやること

手順はこんな感じ。

  • APIキーの発行
  • 独自ドメインの設定
  • テンプレートの作成
  • 配信停止グループの作成
  • SDKで送信

APIキーの発行

管理画面の「Settings > API Keys」から。

APIの種類は3つ

  • Full Access
  • Resticted Access ... 権限を選択できる
  • Billing Access ... 支払い関連のAPIのみ

とりあえず、送信だけなので
「Mail Send」と「Marketing Campaings」のみ。

APIキーは再度表示できないので、ちゃんと保存しておく。

SDKのインストール

Node.js用のSDKも用意されているので、それを使う。
sendgrid/sendgrid-nodejs

中身はWebAPI v3を利用している。
API v3 概要 - ドキュメント | SendGrid
SendGrid v3 API Documentation

SDKの使い方などもドキュメント化されてる。
Email Use Cases

まずは、インストール。

$ npm install --save @sendgrid/mail

とりあえず、READMEにあるサンプルを動かしてみる。
SENDGRID_API_KEYには先程払い出したAPIキーを設定。

import sgMail from "@sendgrid/mail";
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
const msg = {
  to: 'test@example.com',
  from: 'test@example.com', // Use the email address or domain you verified above
  subject: 'Sending with Twilio SendGrid is Fun',
  text: 'and easy to do anywhere, even with Node.js',
  html: '<strong>and easy to do anywhere, even with Node.js</strong>',
};

async function main() {
  try {
    await sgMail.send(msg);
  } catch (error) {
    console.error(error);

    if (error.response) {
      console.error(error.response.body)
    }
  }
}

main().then();

メール送信はこれでOK

独自ドメインの設定

テストメールを送ってみると、「sendgrid.net 経由」と表示される。

これはドメインを設定すると表示されなくなる。

独自ドメインの設定は以下から。
「Settings > Sender Authentication > Domain Authentication」
また、Cloudflareに追加するときはDNSのみにする。

次にトラッキング用のURLも独自ドメインにする。設定は以下から。
「Settings > Sender Authentication > Link Branding」
こっちは、Cloudflareに追加するときはプロキシを有効にする

独自ドメインを利用する - ドキュメント | SendGrid

テンプレートメールの作成

送るメールの雛形をテンプレートメールとして作成できる。

トランザクションメールの場合は、
「Email API > Dynamic Templates」から。

埋め込み文字にも対応していて{{name}}とかを設定すればOK。
件名にもリンクにも使える。

配信停止グループとか便利だけど、
英語版しか無いっぽいので自前で用意する形に。

Dynamic Templatesを使っている場合、 以下の埋め込みタグを使えば、それぞれのリンクを設定してくれる。

配信停止タグを使いこなそう | SendGridブログ

ただし、asm.group_idasm.groups_to_displayを設定しないと、
それぞれのリンクが有効にならないので注意。(ハマった...)

メールの種類ごとに配信停止を管理する - ドキュメント | SendGrid

配信停止グループの作成

SendGridでは、グループを作ることで配信停止を簡単に管理できる。

メールの種類ごとに配信停止を管理する - ドキュメント | SendGrid

コンソールでは「Suppressions > Unsubscribe Group」から。

グループを作成すると、GroupIDが払い出される。
送信時にどのグループのメールかを指定するので控えておく。

グループを作っておくと、ユーザ自身で購読管理できるページも用意してくれる。
全体は英語のみだけど、グループ名は日本語にできる。

受信者による購読管理 - ドキュメント | SendGrid

テンプレートメールの送信

以下のドキュメントを参考に。
sendgrid-nodejs/transactional-templates.md

const msg = {
  to: 'test@example.com',
  from: 'test@example.com',
  dynamicTemplateData: { // 埋め込み文字の設定
    name: "なまえ",
    date: "2021/01/01"
  },
  categories: ["my-app", "alert"], // カテゴリの設定
  asm: { 
    groupId: 99999, // 配信停止グループ
    groupsToDisplay: [88888, 99999] // 購読管理に表示するグループ
  }
};

以上!! SendGrid便利(´ω`)

SSSAPIではβ版ユーザを募集しています!!

GoogleスプレッドシートをサクッとAPI化するサービスを開発してます!
β期間中は最上位プランが無料なので、この機会にぜひぜひお試しください(´ω`)

■SSSAPI
https://sssapi.app

f:id:wannabe-jellyfish:20210824124009p:plain

参考にしたサイト様