Thanks Mail for Stripe

WordPress

PLUGIN

Thanks Mail for Stripeは、Stripe Payment Linksでの購入完了時に自動でサンクスメール(お礼メール)を送信するWordPressプラグインです。

Zapier、Make、IFTTTなどの外部サービスは不要で、Stripeのwebhookを直接受信してメールを送信します。デジタル商品の販売、ソフトウェアライセンスの発行、サービス予約の確認など、様々なシーンで活用できます。

ダウンロード:
WordPress.org プラグインページ (準備中)

このプラグインは現在WordPress.orgにて審査待ちです。

DEMO

Stripe Payment Linkで決済が完了すると、自動的にサンクスメールが送信されます。

日本語用と英語用のPayment Linkを作成しておけば、言語を自動判定して適切なテンプレートでメールを送信します。

INSTALLATION

  1. プラグインをダウンロードし、/wp-content/plugins/ディレクトリにアップロードします
  2. WordPress管理画面の「プラグイン」メニューからプラグインを有効化します
  3. 「設定」→「Thanks Mail for Stripe」で各種設定を行います
  4. 表示されるWebhook URLをStripeダッシュボードに登録します
  5. Webhook署名シークレットとPayment Link IDを設定します
  6. テストメールを送信して動作を確認します

サーバー要件:

  • WordPress 5.0以上
  • PHP 7.4以上
  • SSL証明書(HTTPS必須)
  • SMTPプラグイン推奨(メール到達率向上のため)

FEATURES

1. Webhook経由の自動メール送信

Stripeからwebhookイベント(checkout.session.completed)を受信すると、自動的にサンクスメールを送信します。外部サービスは一切不要です。

2. 日本語・英語テンプレート

日本語(JA)と英語(EN)それぞれのメールテンプレートを用意できます。件名と本文は管理画面から自由にカスタマイズ可能です。

3. Payment Link IDによる言語自動判定

日本語用と英語用で別々のPayment Linkを作成し、そのIDを登録しておくことで、どちらのリンクから購入されたかを判定し、適切な言語のメールを送信します。

4. 二重送信防止(冪等性)

StripeはWebhookをリトライすることがあります。同じ決済に対して複数回メールを送信しないよう、Checkout Session IDをデータベースに保存して重複を防止します。

5. Webhook署名検証

Stripeから送られてくるWebhookが本物かどうかを、HMAC-SHA256署名で検証します。なりすましリクエストを確実にブロックします。

6. テストメール機能

設定が正しく動作するか、実際にテストメールを送信して確認できます。テスト決済をしなくても動作確認が可能です。

SETTINGS

Stripe設定

設定項目 説明
Webhook署名シークレット Stripeダッシュボードで取得したwhsec_...を入力
Payment Link ID(日本語用) 日本語顧客向けのplink_...を入力
Payment Link ID(英語用) 英語顧客向けのplink_...を入力(オプション)

一般設定

設定項目 説明
ブランド名 メール内の{brand}に置換される名前
送信元メールアドレス Fromに表示されるメールアドレス
※必ず自分のドメインのメールアドレスを使用してください
送信者名 Fromに表示される名前
返信先メールアドレス Reply-Toヘッダに設定(Gmail等でもOK)

送信元メールアドレスの重要な注意

送信元メールアドレスには、必ず自分のドメインのメールアドレスを設定してください。

  • OK: info@yoursite.com, support@yoursite.com
  • NG: yourname@gmail.com, yourname@yahoo.co.jp

Gmailなどのフリーメールを送信元に設定すると、メールが届かない原因になります。

理由:サーバーからGmailアドレスを名乗ってメールを送信すると、受信側のメールサーバーが「なりすまし(spoofing)」と判断します。

  • SPF認証失敗:GmailのSPFレコードがあなたのサーバーを許可していない
  • DKIM認証失敗:Gmailの署名キーで署名されていない
  • DMARC:Gmailの厳格なポリシーにより拒否/スパム扱い

返信先メールアドレス(Reply-To)は配信に影響しないため、Gmailなどを設定しても問題ありません。

メールテンプレート

日本語・英語それぞれの件名と本文を設定します。以下のプレースホルダーが使用できます。

  • {brand} – ブランド名(設定で指定)
  • {session_id} – Checkout Session ID(照合用)
  • {email} – 顧客のメールアドレス

STRIPE SETUP

Webhookエンドポイントの登録

  1. Stripeダッシュボードにログイン
  2. Developers → Webhooksを開く
  3. Add endpointをクリック
  4. Endpoint URLにプラグイン設定画面のURLを貼り付け
    https://あなたのドメイン/wp-json/thanks-mail/v1/webhook
  5. 以下のイベントを選択:
    • checkout.session.completed
    • checkout.session.async_payment_succeeded
  6. Add endpointで保存
  7. Signing secret(whsec_...)をコピーしてプラグインに設定

Payment Link IDの確認方法

StripeダッシュボードでPayment Linkの詳細を開くと、URLにplink_...というIDが含まれています。

  • テスト:https://dashboard.stripe.com/test/payment-links/plink_XXXXXXXX
  • 本番:https://dashboard.stripe.com/payment-links/plink_XXXXXXXX

このplink_XXXXXXXXがプラグインに入力するIDです。

TROUBLESHOOTING

Webhookが403エラーになる

セキュリティプラグインやサーバーのWAFがWebhookリクエストをブロックしている可能性があります。

Wordfenceの場合:

  1. Firewall → All Firewall Options → Allowlisted URLsを開く
  2. Webhook URLのパス(/wp-json/thanks-mail/v1/webhook)を追加

エックスサーバーの場合:

  1. サーバーパネル → WordPressセキュリティ設定を開く
  2. 「REST API アクセス制限」をOFFにする

この設定は海外IPからのREST APIアクセスを制限するもので、Stripeからのリクエストもブロックされてしまいます。

Webhookは200なのにメールが届かない

Stripeダッシュボードで{"sent": true}と表示されているのにメールが届かない場合、以下を確認してください。

1. 送信元メールアドレスを確認

送信元メールアドレスにGmailなどのフリーメールを設定していませんか?必ず自分のドメインのメールアドレス(例:info@yoursite.com)を設定してください。詳しくは上記「送信元メールアドレスの重要な注意」を参照してください。

2. 二重送信防止機能

「最近の送信履歴」を確認してください。同じSession IDがすでに記録されている場合、二重送信防止機能が働いています。これは正常な動作です。

3. SMTPプラグインの導入

上記を確認しても届かない場合は、SMTPプラグイン(WP Mail SMTPなど)を導入して、メール送信の信頼性を向上させてください。

テスト環境と本番環境の切り替え

Stripeのテストモードと本番モードでは、以下の値がすべて異なります。

  • Webhook署名シークレット(whsec_...
  • Payment Link ID(plink_...

本番環境に切り替える際は、必ずこれらの値をLive用のものに更新してください。また、StripeダッシュボードのWebhook設定も、テスト用とLive用で別々に登録が必要です。

FILTERS

プラグインの動作をカスタマイズするためのフィルターフックが用意されています。

メールヘッダーのカスタマイズ

CCやBCCを追加する例:

add_filter( 'stm_email_headers', function( $headers, $to, $lang, $session_id ) {
    $headers[] = 'Cc: sales@example.com';
    return $headers;
}, 10, 4 );

言語判定のカスタマイズ

メールアドレスのドメインで言語を判定する例:

add_filter( 'stm_detect_language', function( $lang, $session ) {
    $email = $session['customer_details']['email'] ?? '';
    if ( strpos( $email, '.jp' ) !== false ) {
        return 'ja';
    }
    return $lang;
}, 10, 2 );

利用可能なフィルター一覧

  • stm_email_headers – メールヘッダーの変更
  • stm_email_subject – 件名の変更
  • stm_email_body – 本文の変更
  • stm_detect_language – 言語判定ロジックの変更

DATABASE

プラグインはwp_stm_sent_emailsテーブルを作成し、送信履歴を保存します。

カラム 説明
id BIGINT 自動採番ID
session_id VARCHAR(255) Checkout Session ID(ユニーク)
email VARCHAR(255) 顧客メールアドレス
lang VARCHAR(8) 言語(ja/en)
product_name VARCHAR(255) 商品名
amount VARCHAR(50) 金額
sent_at DATETIME 送信日時

プラグインをアンインストールすると、このテーブルと設定データは自動的に削除されます。

CHANGELOG

1.0.0

  • 初回リリース
  • Webhook経由の自動サンクスメール送信
  • 日本語・英語テンプレート対応
  • Payment Link IDによる言語自動判定
  • 送信元メールアドレス・送信者名のカスタマイズ
  • 二重送信防止機能
  • テストメール機能
  • 送信履歴ログ
  • Webhook署名検証
  • 日本語翻訳同梱

コメント

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