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 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 側の設定
- Stripe Dashboard > Developers > Webhooks で「Add endpoint」を選択
- Endpoint URL にプラグインの「Webhook URL」を入力
- 受信するイベントを
checkout.session.completedに設定 - 表示された Signing Secret(
whsec_xxxxx形式)をプラグイン設定にコピー
サーバー側の注意事項
サーバー側のセキュリティ設定で Stripe からのリクエストがブロックされていないか確認してください。Xserver の WAF(特に「REST API アクセス制限」)や Wordfence、Cloudflare のファイアウォールルールが Stripe IP を遮断することがあります。
セットアップ手順
- プラグインをインストール・有効化
- 「設定 > Thanks Mail for Stripe」を開く
- Webhook タブで Webhook URL をコピー
- Stripe Dashboard でエンドポイント登録
- Signing Secret をプラグイン設定にコピー
- テンプレートタブでメール件名・本文を編集
- テスト送信タブで動作確認
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_body、tmfs_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」から設定します。
Webhook タブ
- Webhook URL:Stripe Dashboard に登録する URL(コピーして使用)
- Signing Secret:Stripe ダッシュボードの Webhook 詳細から取得した
whsec_xxxxx値 - テストモード Signing Secret:本番に切り替える前のテスト用
テンプレートタブ
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 : テンプレート例
日本語のサンキューメール例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
件名:【{brand}】ご購入ありがとうございます {email} 様 このたびは {brand} の商品をご購入いただき、 誠にありがとうございます。 ご注文の確認は、Stripe から別途送られる領収書メールをご確認ください。 商品のダウンロード URL・ライセンスキーは、 本日中に別途メールでお送りいたします。 ご質問があれば、このメールに直接ご返信ください。 参考情報: * Session ID:{session_id} {brand} https://yoursite.com/ |
英語のサンキューメール例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Subject: Thank you for your purchase from {brand} Hello, Thank you for purchasing from {brand}. Please check the receipt email from Stripe for your order details. We will send the download URL and license key in a separate email today. If you have any questions, please reply to this email. Reference: * Session ID: {session_id} {brand} https://yoursite.com/ |
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 つの方法があります:
- Payment Link ID:日本語用と英語用の Payment Link を別々に作って、ID をプラグイン設定に登録すると、確実に言語検出できます
- locale fallback:Payment Link でマッチしなかった場合、Stripe から来る
localeパラメーターを使用
WooCommerce で使えますか?
このプラグインは Stripe Payment Links(単独チェックアウト)専用です。WooCommerce で Stripe を使っている場合は、WooCommerce 標準のメール送信機能を使ってください。
Webhook のテスト方法は?
- Stripe をテストモードに切り替え
- テストモードの Signing Secret をプラグインに設定
- テストカード
4242 4242 4242 4242で擬似決済 - Stripe Dashboard の Webhook ログで 200 応答を確認
- プラグインの送信ログで送信記録を確認
言語ごとに別 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 にフィルターを設定してメールの送信内容や挙動をカスタマイズできます。
メール本文を送信前に加工
|
1 2 3 4 |
add_filter( 'tmfs_email_body', function( $body, $session ) { $body .= "\n\n---\n株式会社サンプル\nhttps://example.com/"; return $body; }, 10, 2 ); |
メール件名を送信前に加工
|
1 2 3 4 5 6 |
add_filter( 'tmfs_email_subject', function( $subject, $session ) { if ( ! empty( $session->metadata->urgent ) ) { $subject = '[緊急]' . $subject; } return $subject; }, 10, 2 ); |
CC / BCC ヘッダーの追加
|
1 2 3 4 |
add_filter( 'tmfs_email_headers', function( $headers, $session ) { $headers[] = 'Bcc: backup@yoursite.com'; return $headers; }, 10, 2 ); |
言語検出のカスタマイズ
1.1.0 以降、tmfs_detect_language フィルターは「テンプレートインデックス(文字列)」を返すように変更されました(破壊的変更)。中国語向けのテンプレートを 3 つめに登録しているケースの例:
|
1 2 3 4 5 6 7 |
add_filter( 'tmfs_detect_language', function( $template_index, $session ) { $cn_link_ids = array( 'plink_xxxxx', 'plink_yyyyy' ); if ( in_array( $session->payment_link, $cn_link_ids, true ) ) { return '2'; // 3 番目のテンプレート(0-indexed) } return $template_index; }, 10, 2 ); |
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_subject、tmfs_email_body、tmfs_email_headers、tmfs_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 : 関連ページ
- プラグイン一覧
- Thanks Mail for Stripe 開発者ガイド – 開発の経緯・Stripe Webhook の実装試行錯誤・トラブル対応





