Thanks Mail for Stripe : Stripe Payment Linksの決済完了メールを自動送信

Thanks Mail for Stripe
  1. PLUGIN : Thanks Mail for Stripe
  2. DEMO : 決済完了からメール送信までの流れ
  3. INSTALLATION : 設置方法
    1. 動作要件
    2. Stripe Dashboard 側の設定
    3. サーバー側の注意事項
    4. セットアップ手順
  4. FEATURES : 機能一覧
    1. 1. Stripe Webhook による自動メール送信
    2. 2. 動的なテンプレート管理(最大 10 件)
    3. 3. スマートな言語検出
    4. 4. プレースホルダー対応のテンプレート
    5. 5. カスタム送信元設定
    6. 6. 重複送信防止(冪等性)
    7. 7. Webhook 署名検証(HMAC-SHA256)
    8. 8. Webhook エンドポイントのレート制限
    9. 9. テスト送信機能
    10. 10. メール送信ログ
  5. SETTINGS : プラグイン設定画面
    1. Webhook タブ
    2. テンプレートタブ
    3. 送信元設定タブ
    4. テスト送信タブ
    5. 送信ログタブ
  6. TEMPLATE : テンプレート例
    1. 日本語のサンキューメール例
    2. 英語のサンキューメール例
  7. FAQ : よくある質問
    1. Webhook で 403 エラーが出る場合は?
    2. Webhook は 200 を返しているのにメールが届かない場合は?
    3. お客様の言語をどう検出しますか?
    4. WooCommerce で使えますか?
    5. Webhook のテスト方法は?
    6. 言語ごとに別 Payment Link を作る理由は?
    7. メールテンプレートで使えるプレースホルダーは?
    8. テストモードでもメールが送信されますか?
    9. wp_mail() が失敗した場合は?
    10. 「sent: true」なのに届かない場合は?
    11. お客様データは保存されますか?
    12. GDPR に準拠していますか?
  8. ADVANCED FILTERS : フィルターフック
    1. メール本文を送信前に加工
    2. メール件名を送信前に加工
    3. CC / BCC ヘッダーの追加
    4. 言語検出のカスタマイズ
  9. CHANGE LOG : バージョン履歴
  10. RELATED PAGES : 関連ページ

PLUGIN : Thanks Mail for Stripe

Thanks Mail for Stripe wordpress.org から最新版をダウンロード

WordPress.org 公式リポジトリで公開しているプラグインの技術リファレンスページです。Stripe Payment Links で決済が完了したとき、お客様に自動でサンキューメールを送信します。Webhook を直接受信して wp_mail() で送信するシンプルな構成で、Zapier・Make・IFTTT などの外部自動化サービスを使わずに WordPress 内で完結します。

ソースコード:GitHub – rapls/thanks-mail-for-stripe

開発の経緯や実装の詳細については、開発者ガイドをご参照ください。

DEMO : 決済完了からメール送信までの流れ

動作フロー図(お客さん→Stripe→WordPress→メール送信)

お客様が Stripe Payment Links で決済を完了すると、Stripe から WordPress サイトの Webhook エンドポイントに通知が送信されます。プラグインは署名(HMAC-SHA256)を検証して正規のリクエストかチェックし、wp_mail() でサンキューメールを送信します。

決済からメール送信まで通常 2〜5 秒以内に完結します。外部サービス(Zapier、Make、IFTTT 等)は不要です。

INSTALLATION : 設置方法

動作要件

  • WordPress 5.0 以上
  • PHP 7.4 以上
  • Stripe アカウント(Payment Links 機能を使用)
  • SSL 証明書(HTTPS 必須。Webhook は HTTPS でのみ動作)
  • SMTP プラグイン推奨(メール到達率向上のため)

Stripe Dashboard 側の設定

  1. Stripe Dashboard > Developers > Webhooks で「Add endpoint」を選択
  2. Endpoint URL にプラグインの「Webhook URL」を入力
  3. 受信するイベントを checkout.session.completed に設定
  4. 表示された Signing Secret(whsec_xxxxx 形式)をプラグイン設定にコピー

サーバー側の注意事項

サーバー側のセキュリティ設定で Stripe からのリクエストがブロックされていないか確認してください。Xserver の WAF(特に「REST API アクセス制限」)や Wordfence、Cloudflare のファイアウォールルールが Stripe IP を遮断することがあります。

セットアップ手順

  1. プラグインをインストール・有効化
  2. 「設定 > Thanks Mail for Stripe」を開く
  3. Webhook タブで Webhook URL をコピー
  4. Stripe Dashboard でエンドポイント登録
  5. Signing Secret をプラグイン設定にコピー
  6. テンプレートタブでメール件名・本文を編集
  7. テスト送信タブで動作確認

FEATURES : 機能一覧

1. Stripe Webhook による自動メール送信

Stripe Payment Links で決済が完了すると、プラグインが自動的にサンキューメールを送信します。Webhook を直接受信して wp_mail() で送信するシンプルな構成です。外部サービスは不要なので、月額の SaaS コストが発生しません。

2. 動的なテンプレート管理(最大 10 件)

1〜10 件のメールテンプレートを動的に追加・削除できます。各テンプレートには以下を個別設定可能:

  • テンプレート名(管理用ラベル)
  • locale 設定(言語)
  • Payment Link ID(マッチング用)
  • 件名(プレースホルダー使用可)
  • 本文(プレースホルダー使用可)
  • テンプレート単位のリセットボタン

3. スマートな言語検出

Stripe Webhook の内容から、お客様に届けるべき言語を自動検出します。優先度順に 2 つの方法:

  • Payment Link ID:JA 用と EN 用で別々の Payment Link を作っておけば、ID から言語を確実に検出
  • locale fallback:Payment Link マッチが失敗したら、checkout session の locale パラメーターから検出

4. プレースホルダー対応のテンプレート

メールテンプレートには以下のプレースホルダーが使えます:

  • {brand} – 設定したブランド名
  • {session_id} – Stripe Checkout Session ID
  • {email} – お客様のメールアドレス

テンプレート編集画面

フィルターフック tmfs_email_bodytmfs_email_subject でさらにカスタマイズも可能。

5. カスタム送信元設定

「From Email」「From Name」「Reply-To」を独立して設定できます。

  • 送信元:自社ドメイン(SPF/DKIM/DMARC 通過のため)
  • 返信先:個人の Gmail アドレス(個人で対応する場合)

6. 重複送信防止(冪等性)

Stripe Webhook は同じイベントを複数回送信してくることがあります(リトライ仕様)。プラグインは session_id をキーにメール送信履歴を専用テーブルに記録しており、同じ session_id に対しては 2 回目以降の送信をスキップします。

7. Webhook 署名検証(HMAC-SHA256)

Stripe からの Webhook リクエストは、Signing Secret を使って HMAC-SHA256 で署名検証されます。署名が一致しない不正なリクエストは即座に拒否されます。

8. Webhook エンドポイントのレート制限

1.0.1 以降、Webhook エンドポイントには IP ごとに 60 秒で 10 リクエストのレート制限が組み込まれています。リプレイ攻撃や過剰リクエストへの基本的な防御層です。

9. テスト送信機能

設定画面のテスト送信タブから、任意のメールアドレス・任意のテンプレートで実際にメールを送信して動作確認できます。テストモード時はテストモードの Signing Secret を使うので、本番設定に影響しません。

テストメール送信ボタンと「送信成功」の表示画面

10. メール送信ログ

過去に送信したメールの履歴を管理画面で閲覧できます。送信日時、Session ID、お客様メールアドレス、使用テンプレート、送信ステータスが一覧表示されます。

プラグイン管理画面の「最近の送信履歴」一覧のスクリーンショット

SETTINGS : プラグイン設定画面

WordPress の管理画面「設定 > Thanks Mail for Stripe」から設定します。

WordPress管理画面「設定」→「Thanks Mail for Stripe」の設定画面全体のスクリーンショット

Webhook タブ

  • Webhook URL:Stripe Dashboard に登録する URL(コピーして使用)
  • Signing Secret:Stripe ダッシュボードの Webhook 詳細から取得した whsec_xxxxx
  • テストモード Signing Secret:本番に切り替える前のテスト用

Add endpoint でURL入力+イベント選択している画面のスクリーンショット

テンプレートタブ

1〜10 件のメールテンプレートを編集できます。各テンプレートには:

  • テンプレート名(管理用ラベル)
  • locale 設定(ja、en など)
  • Payment Link IDs(カンマ区切り)
  • 件名(プレースホルダー使用可)
  • 本文(プレースホルダー使用可)
  • このテンプレートだけリセットするボタン

送信元設定タブ

  • From Email:送信元メールアドレス(自社ドメイン推奨)
  • From Name:送信元名前
  • Reply-To:返信先メールアドレス(自由)
  • Brand{brand} プレースホルダーに展開される文字列

「From Email」に Gmail を設定すると、SPF/DKIM の問題で受信側で迷惑メール扱いされやすくなります。必ず自社ドメインのアドレスを使ってください。

テスト送信タブ

任意のメールアドレス・任意のテンプレートで実際にメールを送信できます。テストモード時はテストモードの Signing Secret を使うので、本番設定に影響しません。

送信ログタブ

過去に送信したメールの履歴を一覧表示します。

  • 送信日時
  • Stripe Session ID
  • お客様メールアドレス
  • 使用テンプレート
  • 送信ステータス

TEMPLATE : テンプレート例

日本語のサンキューメール例

英語のサンキューメール例

FAQ : よくある質問

Webhook で 403 エラーが出る場合は?

サーバーのセキュリティ設定が Stripe のリクエストをブロックしている可能性があります:

  • Wordfence:Firewall > Allowlisted URLs に Webhook URL を追加
  • Xserver WAF:「REST API アクセス制限」をオフ(海外 IP ブロックが Stripe を遮断)
  • Cloudflare:Stripe IP を許可するファイアウォールルールを作成
  • その他のセキュリティプラグイン:Webhook エンドポイントをホワイトリスト登録

Webhook は 200 を返しているのにメールが届かない場合は?

メールログ(送信ログタブ)を確認してください。Session ID がログに記録されている場合、プラグインは「すでに送信済み」と判定して 2 回目をスキップしています(重複防止機能)。これは意図した動作です。

ログに記録がない場合は、wp_mail() の送信失敗が考えられます。SMTP プラグイン(WP Mail SMTP 等)の導入をご検討ください。

お客様の言語をどう検出しますか?

優先度順に 2 つの方法があります:

  1. Payment Link ID:日本語用と英語用の Payment Link を別々に作って、ID をプラグイン設定に登録すると、確実に言語検出できます
  2. locale fallback:Payment Link でマッチしなかった場合、Stripe から来る locale パラメーターを使用

WooCommerce で使えますか?

このプラグインは Stripe Payment Links(単独チェックアウト)専用です。WooCommerce で Stripe を使っている場合は、WooCommerce 標準のメール送信機能を使ってください。

Webhook のテスト方法は?

  1. Stripe をテストモードに切り替え
  2. テストモードの Signing Secret をプラグインに設定
  3. テストカード 4242 4242 4242 4242 で擬似決済
  4. Stripe Dashboard の Webhook ログで 200 応答を確認
  5. プラグインの送信ログで送信記録を確認

言語ごとに別 Payment Link を作る理由は?

Payment Link ID は Webhook イベントに必ず含まれます。これにより言語検出が 100% 確実になります。同一 Payment Link で locale fallback を使う方法でも動作しますが、locale 情報が取得できない場合に検出失敗します。

メールテンプレートで使えるプレースホルダーは?

  • {brand} – 設定したブランド名
  • {session_id} – Stripe Checkout Session ID(参照用)
  • {email} – お客様のメールアドレス

テストモードでもメールが送信されますか?

はい。テストモードの Signing Secret を設定していれば送信されます。本番運用前の動作確認に活用してください。

wp_mail() が失敗した場合は?

1.0.1 以降、メール送信に失敗した場合は送信ログに「sent: false」として記録され、誤って「送信済み」とマークされません(リトライ可能)。SMTP プラグイン(WP Mail SMTP、Post SMTP、FluentSMTP 等)の導入で到達率を上げることをおすすめします。

「sent: true」なのに届かない場合は?

メール認証の問題が原因のことが多いです。「From Email」の設定を確認してください。

重要:From Email は自社ドメインのアドレスを使う

  • 良い例:info@yoursite.com、support@yoursite.com
  • 悪い例:yourname@gmail.com、yourname@yahoo.com

サーバーが「@gmail.com から送信」と主張すると、受信側のサーバーは「なりすまし」と判定します(SPF / DKIM / DMARC のいずれかで失敗)。「Reply-To」には自由なアドレスを使えますが、「From」は必ず自社ドメインに。

お客様データは保存されますか?

はい。重複送信防止のためにメールアドレス・Session ID・送信日時が独自テーブル(wp_tmfs_email_log)に保存されます。プライバシーポリシーへの記載が必要です。プラグインアンインストール時にデータは自動削除されます。

GDPR に準拠していますか?

プラグインはお客様のメールアドレスを「重複メール防止のため」「送信履歴のため」という正当な業務目的で保存します。プライバシーポリシーに「決済データを保存していること」を明示する必要があります。データは WordPress データベース内のみに保存され、第三者と共有されることはありません。

ADVANCED FILTERS : フィルターフック

functions.php にフィルターを設定してメールの送信内容や挙動をカスタマイズできます。

メール本文を送信前に加工

メール件名を送信前に加工

CC / BCC ヘッダーの追加

言語検出のカスタマイズ

1.1.0 以降、tmfs_detect_language フィルターは「テンプレートインデックス(文字列)」を返すように変更されました(破壊的変更)。中国語向けのテンプレートを 3 つめに登録しているケースの例:

CHANGE LOG : バージョン履歴

  • 1.1.1Plugin URI を新しいプラグインページ (https://raplsworks.com/plugins/thanks-mail-for-stripe/) に更新しました。
  • 1.1.0動的なテンプレート管理(1〜10 件、追加/削除ボタン付き)。各テンプレートに個別ラベル・locale・Payment Link ID・件名・本文を設定可能、テンプレート単位のリセットボタンも追加。Webhook はテンプレートと Payment Link ID または locale fallback でマッチ。設定データはフラット形式から配列形式へ自動マイグレーション。破壊的変更tmfs_detect_language フィルターは言語コードではなくテンプレートインデックス(文字列)を返すように変更。
  • 1.0.4すべての内部 prefix を stm_ から tmfs_ に変更(オプション名・テーブル名・設定グループ・transient キー・JS グローバル変数)して WordPress.org の 4 文字以上 prefix 要件に準拠。Plugin URI を公開ページ公開後に復活。
  • 1.0.3メインクラスを TMFS_Thanks_Mail にリネームして WordPress.org 命名規約に準拠。すべてのフィルターフック(tmfs_email_subjecttmfs_email_bodytmfs_email_headerstmfs_detect_language)に tmfs_ prefix を適用。アンインストール関数を tmfs_uninstall_cleanup にリネーム。テンプレートのグローバル変数($tmfs_recent_emails$tmfs_email)にも prefix。カスタムテーブルクエリに phpcs:ignore を追加。load_plugin_textdomain() 呼び出しを削除(WordPress 4.6 以降は不要)。
  • 1.0.2外部リソース読み込み(BuyMeACoffee CDN 画像)を削除しローカルテキストリンクに置き換え。インライン JavaScript を assets/js/admin.js として正しく enqueue。グローバル定数を STM_ から TMFS_ prefix にリネームし、define() 衝突ガードを追加。$_SERVER['REMOTE_ADDR'] アクセスに wp_unslash()filter_var()(FILTER_VALIDATE_IP)を適用。error_log() 呼び出しを WP_DEBUG チェックでラップ。テーブル名サニタイズ用に esc_sql()uninstall.php で復活。/test エンドポイントに REST API スキーマ定義(バリデーション付き)を追加。
  • 1.0.1メール送信失敗が誤って「sent」としてデータベースに記録されるバグを修正。送信前のメールアドレスバリデーション(is_email())を追加。Webhook エンドポイントに IP ごとのレート制限(60 秒で 10 リクエスト)を追加。Data & Privacy ドキュメントを readme でより明確に記述。
  • 1.0.0初回リリース。Webhook ベースの自動サンキューメール送信、日本語と英語のテンプレート対応、Payment Link ID または locale による言語検出、カスタム送信元メール・名前設定、session ID トラッキングによる重複防止、テスト送信機能、最近の送信履歴付きメール送信ログ、安全な Webhook 署名検証、クイックセットアップガイド付き管理画面、日本語翻訳付属。

RELATED PAGES : 関連ページ

タイトルとURLをコピーしました