sales-sendgrid について
Twilio SendGridを利用する開発者、マーケティング担当者、管理者向けのガイダンススキルです。目的に応じてプラットフォームの質問に答え、専門的な相談を関連スキルへ案内します。
主な機能
- 01SendGridの相談内容の分類
- 02API・SMTPメールの案内
- 03キャンペーンとテンプレートの案内
- 04ドメイン認証と到達性の支援
- 05イベントWebhookと受信設定
- 06関連スキルへの振り分け
活用シーン
- 01トランザクションメールの計画
- 02マーケティングオートメーションの設定
- 03ドメイン認証の問題調査
- 04イベントWebhookの設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sales-skills/ sales --skill sales-sendgridインストール後、Claude Code で/sales-sendgridを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/learnings.mdplatform-guide.mdsendgrid-api-reference.md詳細
SendGrid プラットフォームに関するサポート
Email API や SMTP リレーを使ったトランザクションメールから、Marketing Campaigns、Dynamic Templates、Event Webhooks、Inbound Parse、ドメイン認証、専用 IP、抑制リスト、メールテスト、各種インテグレーションまで、SendGrid(Twilio)プラットフォームに関する質問に対応します。
ステップ 1 — コンテキストを確認する
references/learnings.md が存在する場合は、蓄積された知識を確認するため、まず読み込みます。
ユーザーに次の質問をします。
-
SendGrid のどの分野についてサポートが必要ですか?
- A) Email API — REST API または SMTP リレーを使ったトランザクションメールの送信、SDK
- B) Marketing Campaigns — ドラッグ&ドロップエディター、単発メール、オートメーション、登録フォーム
- C) Dynamic Templates — Handlebars ベースのトランザクションメール用テンプレート、テンプレートのバージョン管理
- D) Domain Authentication — SPF/DKIM/DMARC の設定、ブランド化されたトラッキングリンク、逆引き DNS
- E) Event Webhooks — 配信イベント、エンゲージメントイベント、Webhook の設定
- F) Inbound Parse — Webhook を使った受信メールの受信と解析
- G) Email Validation API — メールアドレスの検証、使い捨てドメインの検出
- H) Dedicated IPs / Deliverability — IP のウォームアップ、IP プール、送信者のレピュテーション
- I) Suppressions — バウンス、ブロック、スパム報告、配信停止の管理
- J) Analytics / Statistics — 集計統計、カテゴリ別統計、メールボックスプロバイダー別統計
- K) Account / Billing — プラン、料金、サブユーザー、チームメイト、API キー
- L) その他 — 内容を説明してください
-
あなたの役割は何ですか?
- A) 開発者/エンジニア
- B) マーケティングマネージャー/メールマーケター
- C) DevOps/インフラ担当
- D) 管理者/アカウント所有者
- E) 創業者/個人事業主
- F) 代理店/フリーランサー
- G) その他
-
何を達成しようとしていますか?(具体的な目標や質問を説明してください)
ユーザーの依頼にすでにほとんどの情報が含まれている場合は、該当するステップに進んでください。 合理的な前提を明示したうえで、可能な範囲で最善の回答を最初に提示し、最後に最も重要な確認事項を 1~2 個だけ質問してください。完全なコンテキストが集まるまで回答を保留しないでください。
注:ユーザーに専門スキルが必要な場合は、そちらが適している理由を簡潔に説明して案内してください。
ステップ 2 — 適切なスキルに案内するか、直接回答する
依頼が専門スキルに該当する場合は、次のように案内します。
- 一般的なメールマーケティング戦略/ベストプラクティス ->
/sales-email-marketing - 複数プラットフォームに共通するメール配信到達性(SendGrid 固有ではない内容) ->
/sales-deliverability - メールの開封/クリックトラッキング戦略 ->
/sales-email-tracking - Zapier またはミドルウェアを使った SendGrid と他のツールの接続 ->
/sales-integration - ファネル戦略/コンバージョン最適化 ->
/sales-funnel
それ以外の場合は、以下のリファレンスにあるプラットフォームの知識をもとに直接回答します。
ステップ 3 — SendGrid プラットフォームのリファレンス
詳細なモジュールのドキュメント、料金、インテグレーション、データモデルについては、references/platform-guide.md を読み込んでください。
プラットフォームガイドの詳細はもう必要ありません。ユーザーの具体的な状況に集中してください。
ステップ 4 — 具体的なガイダンス
ユーザーの具体的な質問に基づいて、以下のように案内します。
-
API を使用したトランザクションメールの送信:
- Settings > API Keys で、「Mail Send」権限を持つ API キーを作成します
- Settings > Sender Authentication で送信ドメインを認証します(CNAME レコードを DNS に追加します)
- 使用する言語の SDK をインストールします(例:Node.js の場合は
npm install @sendgrid/mail) - API キーを設定します:
sgMail.setApiKey(process.env.SENDGRID_API_KEY) - メールを作成して送信します:
to、from、subject、text/html(またはtemplateIdとdynamicTemplateData)を設定します - 応答を処理します — 202 Accepted(成功)またはエラーコードを確認します
- 配信とエンゲージメントのイベントを追跡するために、Event Webhooks を設定します
-
Marketing Campaigns の自動化の設定:
- Marketing Campaigns のプランに登録します(自動化には Advanced プランが必要です)
- 連絡先をリストにインポートするか、追加します — CSV のアップロード、登録フォーム、または Contacts API を使用します
- Automations > Create Automation に移動します
- トリガーを選択します:ウェルカムシリーズ(リストへの新しい連絡先の追加時)、日付ベース、またはカスタム
- メールのシーケンスを作成します — メールのステップを追加し、その間の遅延を設定します
- ドラッグ&ドロップエディターまたはコードエディターを使用して、各メールをデザインします
- 自動化を有効にし、自動化ダッシュボードで開始率と完了率を監視します
-
ドメイン認証の設定:
- Settings > Sender Authentication > Authenticate Your Domain に移動します
- DNS ホストを選択し、送信ドメインを入力します
- SendGrid が SPF と DKIM 用の CNAME レコードを生成します — DNS プロバイダーに追加します
- SendGrid で Verify をクリックします — DNS レコードがあるかどうかが確認されます
- ブランド化されたトラッキングリンク(リンクのブランド化)を設定します — クリック/開封のトラッキング用に別の CNAME を追加します
- 専用 IP を使用する場合は、IP をドメインにマッピングする逆引き DNS を設定します
- DNS に DMARC レコードを別途設定します(例:
v=DMARC1; p=quarantine; rua=mailto:[email protected])
-
Event Webhooks の設定:
- Settings > Mail Settings > Event Webhook に移動します
- Webhook URL を入力します(一般公開されている HTTPS エンドポイントである必要があります)
- 受信するイベント(processed、delivered、open、click、bounce など)を選択します
- Webhook を有効にします
- SendGrid の公開鍵を使用して、エンドポイントで署名検証を実装します
- イベントオブジェクトの JSON 配列を処理します — 各オブジェクトには
event、email、timestamp、カスタム引数が含まれます - 再試行を処理します — SendGrid は失敗した配信を最大 24 時間再試行します
-
Inbound Parse の設定:
- 受信ドメインに MX レコードを追加し、
mx.sendgrid.netを指定します - Settings > Inbound Parse > Add Host & URL に移動します
- 受信ドメインと、解析済みメールを受信するための Webhook URL を入力します
- raw(MIME)形式または parsed(構造化フィールド)形式を選択します
- マルチパートの POST データ(from、to、subject、body、添付ファイル)を処理するよう、Webhook エンドポイントを実装します
- 設定したドメインの任意のアドレス宛てにメールを送信してテストします
- 受信ドメインに MX レコードを追加し、
注意点
調査に基づくベストエフォートの情報です。詳細は最新の SendGrid ドキュメントで確認してください。
- Email API と Marketing Campaigns は別々のサブスクリプションで、請求も別です。 1 つのプランですべてを利用できると思い込むユーザーは少なくありません。トランザクションメール(注文確認、パスワードリセット)とマーケティングメール(ニュースレター、プロモーション)の両方を送信する場合は、2 つのサブスクリプションが必要です。それに応じて予算を組み、各プランに含まれる機能を把握してください。
- 無料トライアルは 1 日あたり 100 通で 60 日間のみです。恒久的な無料プランではありません。 一部の競合サービスとは異なり、SendGrid の無料提供には有効期限があります。60 日後には有料プランにアップグレードするか、メールを送信できなくなります。この制限を踏まえて、評価と移行のスケジュールを立ててください。
- 専用 IP はウォームアップしないと、すぐに到達率の問題が発生します。 新しい専用 IP には送信実績がありません。コールド IP で大量のメールを送ると、メールボックスプロバイダーによって送信が制限されたり、拒否されたりします。SendGrid の自動ウォームアップ(デフォルトで有効)を使うか、数百通から目標送信数まで 4~6 週間かけて増やす手動ウォームアップのスケジュールを作成してください。
- 抑制グループはデフォルトで有効になっていません。設定しないと、配信停止はすべてのメールに適用されます。 抑制グループ(「配信停止グループ」とも呼ばれます)を設定していない場合、配信停止によってその連絡先はすべてのメールから削除されます。早めに抑制グループ(例:「マーケティング」「製品アップデート」「請求アラート」)を設定して、受信者がすべての連絡を受け取れなくなることなく、特定のカテゴリだけをオプトアウトできるようにしてください。
- Event Webhook のペイロードはまとめて送信され、遅延する場合があります。リアルタイムのロジックには依存しないでください。 SendGrid は Webhook イベントをまとめて送信するため、数秒から数分遅れる場合があります。リアルタイムの配信確認が必要な場合は、API をポーリングするか、mail/send のレスポンスコード(202 = 処理の受付)を使用してください。Webhook のコンシューマーは、順不同のイベントや重複イベントを冪等に処理できるように設計してください。
- 再試行時に
sg_event_idは変わります。重複排除には絶対に使用しないでください。 ドキュメントではsg_event_idを「重複排除に利用できる、このイベント固有の ID」と説明していますが、再試行のたびに ID は変わります。同じメール、同じイベント、同じタイムスタンプでも、sg_event_idは異なります。代わりに複合重複排除キーを作成してください:${sg_message_id}:${event}:${email}。処理済みキーは Redis(SendGrid の 24 時間の再試行期間をカバーする 48 時間の TTL を設定)またはデータベースに保存し、各イベントの処理前に確認してください。 - 共有 IP の評価が低下すると、予告なくメールの到達率が悪化する可能性があります。 無料プランまたは Essentials プランでは、他の送信者と IP を共有します。同じプールを使う悪質な送信者が Spamhaus のブロックリストに登録されたり、Microsoft にブロックされたりすると、送信者スコアが 99%で認証に問題がなくても、あなたのメールまで影響を受けます。SendGrid の公式見解では、「ブロックリストへの登録は、共有 IP プールを通じて送信する際には自然に起こり得ること」です。原因不明の到達率低下が見られる場合は、IP がブロックリストに登録されていないか(mxtoolbox.com)確認し、専用 IP(Pro プラン)へのアップグレードを検討してください。
- Node.js SDK は HTTP 接続をプールしないため、一括送信でソケットが枯渇します。 多数の
sgMail.send()呼び出しを同時に実行すると、EMFILEエラー(ファイル記述子の上限)に達します。SDK はリクエストごとに新しい接続を作成します。接続数を減らすには、順次送信(awaitを使ったfor...of)、並行処理数の制限(p-limitを 2~10 に設定)、またはパーソナライゼーション(1 回のリクエストで最大 1000 人の受信者)を使用してください。 - SDK の配列呼び出し 1 回ですべてのメッセージを送信すると、配信が数時間遅れることがあります。
sgMail.send()に配列を渡すと、SendGrid はサーバー側でメッセージをキューに入れます。時間に敏感なメールを送る場合は、パーソナライゼーション(同じ内容を 1 回のリクエストで異なる受信者に送信)を使うか、巨大なバッチを 1 回送るのではなく、並行処理数を制御して個別に呼び出してください。
- 継続的な改善:ここに記載されていない情報を見つけた場合は、今日の日付とともに
references/learnings.mdに追記してください。
ステップ 5 — 関連スキル
/sales-email-marketing— メールマーケティングの戦略とベストプラクティス(プラットフォームに依存しません)/sales-deliverability— プラットフォームを横断したメール到達率 — SPF/DKIM/DMARC、ウォームアップ、受信トレイへの配置/sales-email-tracking— メールの開封・クリックを追跡する戦略/sales-integration— Zapier、Make、または API を使って SendGrid をほかのツールに接続します/sales-funnel— ファネル戦略とコンバージョンの最適化/sales-do— どのスキルを使えばよいかわかりませんか?ルーターがあらゆる営業目標に合ったスキルを選びます。インストール:npx skills add sales-skills/sales --skill sales-do
使用例
例 1:SaaS アプリのトランザクションメールを設定する
ユーザーの発言:「SendGrid を使って、Node.js アプリからパスワード再設定メールとウェルカムメールを送りたいです。」 スキルの動作:
- セキュリティのため、「Mail Send」権限のみを持つ制限付き API キーの作成手順を説明します
- SPF/DKIM 用の CNAME レコードを追加するドメイン認証の設定を案内します
@sendgrid/mailのインストール方法と、環境変数を使った API キーの設定方法を示します- SendGrid の UI で 2 つの Dynamic Templates を作成します。1 つはパスワード再設定用(
{{reset_link}}を使用)、もう 1 つはウェルカム用({{first_name}}、{{login_url}}を使用)です templateIdとdynamicTemplateDataを使ったsgMail.send()のコード例を提示します- 配信失敗を追跡し、バウンス時にアラートを起動するため、Event Webhooks の設定を推奨します 結果:テンプレート、適切な認証、配信監視を備えた、本番環境ですぐに使えるトランザクションメールを利用できます
例 2:マーケティングメールを Mailchimp から SendGrid に移行する
ユーザーの発言:「ニュースレターを Mailchimp から SendGrid Marketing Campaigns に移行します。どのように進めればよいですか?」 スキルの動作:
- 二重サブスクリプションモデルについて説明します。Marketing Campaigns は Email API とは別のため、適切なプラン(Basic または Advanced)が必要です
- Mailchimp から連絡先をエクスポート(CSV)し、フィールドをマッピングして SendGrid にインポートする手順を案内します
- 登録済みの連絡先のみをインポートするよう注意を促し、インポート前に SendGrid で抑制グループを再作成するよう案内します
- SendGrid のドラッグ&ドロップエディターまたはコードエディターを使って、メールテンプレートを再作成する手順を案内します
- DNS の変更について説明します。Mailchimp の認証レコードを削除し、SPF/DKIM 用に SendGrid の CNAME レコードを追加します
- ウォームアップ戦略を推奨します。最もエンゲージメントの高い連絡先から始め、特に新しい専用 IP を使う場合(Advanced プラン)は、2~4 週間かけて徐々に対象を広げます 結果:配信到達率を維持するため、連絡先、テンプレート、DNS、抑制、ウォームアップを網羅した移行計画を利用できます
例 3:配信追跡用の Event Webhooks を設定する
ユーザーの発言:「どのメールがバウンスし、どのメールが配信されたかを追跡して、CRM を更新したいです。」 スキルの動作:
- Event Webhook の設定を案内し、processed、delivered、deferred、bounce、dropped のイベントを選択します
- JSON イベントのバッチを受信する Webhook エンドポイントの実装手順を説明します
- SendGrid の公開鍵を使った署名検証で、エンドポイントを保護する方法を説明します
- CRM の更新ロジックを設計します。配信イベントで連絡先を「配信済み」にし、ハードバウンスでは「無効」としてフラグを付け、遅延時は再試行キューに追加します
- 配信がバッチ処理または遅延する場合や、イベントが重複する場合があると注意を促します。イベントの
sg_message_idを重複排除キーとして使い、冪等に処理することを推奨します - CRM でエンゲージメントを追跡するため、開封イベントとクリックイベントへの登録も提案します 結果:SendGrid の配信イベントとエンゲージメントイベントに合わせて CRM を同期する Webhook パイプラインを利用できます
トラブルシューティング
専用 IP への切り替え後、メールがスパムに振り分けられる
症状:専用 IP が付属する Pro または Advanced プランにアップグレードした直後に、到達率が低下し、メールがスパムに振り分けられるようになります。
原因:専用 IP は新しく、送信レピュテーションがありません。メールボックスプロバイダー(Gmail、Yahoo、Outlook)は、未知の IP に慎重で、その IP からのメールを制限したり、スパムフォルダーに振り分けたりします。
解決策:Settings > IP Addresses で IP の自動ウォームアップを有効にします(新しい IP ではデフォルトで有効になっているはずです)。オフにしている場合は、再度有効にします。ウォームアップ中、SendGrid は新しい専用 IP と共有 IP プールにトラフィックを分散し、数週間かけて専用 IP への送信量を徐々に増やします。ウォームアップしていない IP から全量を送信しないでください。すでに到達率が低下している場合は、大量送信を一時停止してウォームアップを再度有効にし、エンゲージメントの高い受信者から送信を開始します。メールボックスプロバイダーの統計情報を確認し、どのプロバイダーが拒否しているかを把握します。包括的なウォームアップガイドについては、/sales-deliverability を参照してください。
Event Webhook がイベントを受信しない
症状:Event Webhook の URL を設定したものの、エンドポイントがイベントデータをまったく受信しません。 原因:Webhook の URL がパブリックにアクセスできない、HTTPS 証明書が無効、エンドポイントが 2xx 以外のステータスコードを返している、または Webhook が有効になっていません。 解決策:Settings > Mail Settings > Event Webhook で Webhook が有効になっていることを確認します。URL にパブリックからアクセスできること(localhost ではなく、ファイアウォールの内側でもないこと)を確認します。HTTPS 証明書が有効で、自己署名証明書ではないことを確認します。サンプル JSON を POST して、エンドポイントを手動でテストします。エンドポイントが 3 秒以内に 2xx ステータスコードを返すことを確認します。タイムアウトやエラーは SendGrid によって失敗とみなされ、再試行されますが、24 時間後には再試行が停止します。ローカル開発でのテストには、ngrok などのツールを使用します。SendGrid の Event Webhook アクティビティログで、配信の試行とエラーコードを確認します。
Gmail/Yahoo が DMARC アライメントエラーでメールをブロックする
症状:421 4.7.32 From: header isn't aligned with either the authenticated SPF or DKIM organizational domain というエラーでメールが遅延または拒否されます。特にスケジュール送信でよく発生します。
原因:From アドレスのドメインが、SendGrid で認証したドメインと一致していません。たとえば、SendGrid 経由で gmail.com のアドレスから送信している場合や、notifications.example.com だけを認証しているのに [email protected] から送信している場合です。2024 年 2 月以降、Gmail と Yahoo は DMARC アライメントを厳格に適用しています。
解決策:Settings > Sender Authentication > Authenticate Your Domain に移動し、送信元と完全に一致するドメインを認証します。SendGrid が生成した CNAME レコードを DNS に追加します。From アドレスが認証済みドメインと一致することを確認します。たとえば、example.com を認証した場合は、[email protected] から送信します。DNS に DMARC レコードを追加します:v=DMARC1; p=none; rua=mailto:[email protected](監視を開始するため、まずは p=none にします)。共有 IP プランを利用していて、認証を修正しても送信制限が続く場合は、共有 IP のレピュテーションが低い可能性があります。mxtoolbox.com で確認し、専用 IP(Pro プラン)の利用を検討してください。
Webhook イベントの重複排除に失敗する — データベースに重複エントリが作成される
症状:sg_event_id を確認しているにもかかわらず、Webhook イベントが重複して処理されます。同じメール、同じイベントタイプ、同じタイムスタンプなのに、sg_event_id の値が異なります。
原因:sg_event_id は再試行のたびに変わります。ドキュメントでは重複排除キーとされていますが、論理イベントごとではなく、配信の試行ごとに一意です。
解決策:再試行をまたいで安定しているフィールドを使って、複合重複排除キーを作成します:${sg_message_id}:${event}:${email}。処理済みのキーは、有効期限を 48 時間に設定して Redis に保存します(余裕を持たせて SendGrid の 24 時間の再試行期間をカバーします)。または、一意制約を設定したデータベーステーブルに保存します。各イベントを処理する前に、キーを確認します。大量のトラフィックを扱うシステムでは、高速な検索に Bloom フィルター、または EXPIRE を設定した Redis SET を使用します。
一括メール送信時の EMFILE エラー/ソケット枯渇
症状:数百通から数千通のメールを送信すると Error: connect EMFILE が発生します。通常、最初の数バッチは成功しますが、その後のバッチは失敗します。
原因:sgMail.send() を呼び出すたびに、新しい HTTP 接続が開かれます。Node.js のデフォルトのファイル記述子数の上限は約 1024 です。以前の接続が閉じる前に、同時リクエストによって利用可能なソケットが枯渇します。SendGrid Node SDK は接続をプールしません。
解決策:3 つの方法から 1 つを選択してください。(1)順次送信する:for (const msg of messages) { await sgMail.send(msg); }。最も遅い方法ですが、最も簡単です。(2)同時実行数を制限する:p-limit を使い、同時リクエスト数を 2~10 に設定します:const limit = pLimit(5); await Promise.all(msgs.map(m => limit(() => sgMail.send(m))));。(3)personalizations を使う:宛先ごとに差し替えデータが異なるだけで、内容が同じ場合は、personalizations 配列を使って 1 回の API 呼び出しで最大 1000 人に送信できます。これが最も効率的な方法で、HTTP 接続も 1 つだけ使用します。
マーケティング連絡先がセグメントに表示されない
症状:連絡先をインポートしたか、API 経由で追加したものの、想定どおりにセグメントやリストに表示されません。
原因:Marketing Campaigns での連絡先の取り込みは非同期です。連絡先のインデックス作成が完了し、セグメントで利用可能になるまで、数分から数時間かかることがあります。また、無効なフィールドや重複の処理が原因で、インポートが部分的に失敗した可能性もあります。
解決策:Marketing > Contacts > Imports でインポートのステータスを確認し、エラーや警告がないか調べてください。大規模なインポートでは、インデックス作成が完了するまで最大 2 時間待ちます。インポート時のカスタムフィールド名が、SendGrid アカウントで定義されているカスタムフィールドと一致していることを確認してください(一致しないフィールドは通知なく破棄されます)。UI で特定の連絡先を検索し、想定したフィールド値が設定されていることを確認します。API で追加した連絡先(PUT /v3/marketing/contacts)の場合は、レスポンスの job_id を確認し、GET /v3/marketing/contacts/imports/{id} をポーリングしてステータスを確認してください。連絡先がリストには表示されるもののセグメントには表示されない場合は、セグメントのクエリ条件を見直し、フィールド名と演算子が実際の連絡先データと一致していることを確認してください。