double-opt-in-email について
ダブルオプトインのメール購読フローを設計するための実務的なスキルです。マーケティング同意を扱うチーム向けに、確認手順、抑制リスト、複数地域の法令要件を整理します。
主な機能
- 012段階のメール同意フロー
- 02メール形式の検証
- 03抑制リストの確認
- 04トークンの期限と再試行処理
- 05複数地域の同意ルール
活用シーン
- 01ニュースレター登録フローの構築
- 02抑制リスト宛ての確認メール送信の防止
- 03期限切れまたは再利用された確認リンクへの対応
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ privacy-data-protection-skills --skill double-opt-in-emailインストール後、Claude Code で/double-opt-in-emailを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/template.mdreferences/standards.mdworkflows.mdscripts/process.py詳細
ダブルオプトインメールの実装
概要
ダブルオプトイン(DOI)は、メールマーケティングにおける同意取得のゴールドスタンダードです。次の2つの手順が必要です。(1)ユーザーがメールアドレスを送信し、関心があることを示します。(2)ユーザーが確認メール内の認証リンクをクリックします。これにより、GDPR第7条1項(立証可能性)、ePrivacy指令第13条(電子メールマーケティングに対する事前同意)、およびドイツ連邦通常裁判所(BGH)の判決で定められた、ドイツで期待される標準としてのDOIを満たす、検証可能な同意記録が作成されます。
ダブルオプトインのワークフロー
START: User enters email on CloudVault SaaS Inc. sign-up or newsletter form
│
├─► Step 1: Initial Opt-In Request
│ ├─ User enters email address
│ ├─ User ticks unticked checkbox: "Send me product updates and news"
│ ├─ Validate email format (RFC 5322)
│ ├─ Check suppression list — if email is suppressed, do NOT send confirmation
│ └─ Display: "Check your email to confirm your subscription."
│
├─► Step 2: Generate Confirmation Token
│ ├─ Create cryptographically random token (256-bit, URL-safe base64)
│ ├─ Associate token with: email address, purpose, timestamp, IP, user agent
│ ├─ Set expiration: 48 hours from generation
│ └─ Store pending subscription record (status: "pending_confirmation")
│
├─► Step 3: Send Confirmation Email
│ ├─ From: [email protected]
│ ├─ Subject: "Confirm your CloudVault newsletter subscription"
│ ├─ Body:
│ │ ├─ "You requested to receive product updates from CloudVault SaaS Inc."
│ │ ├─ "Click below to confirm:"
│ │ ├─ [Confirm Subscription] button → confirmation URL with token
│ │ ├─ "If you didn't request this, you can ignore this email."
│ │ ├─ "This link expires in 48 hours."
│ │ └─ Controller details: CloudVault SaaS Inc., 42 Innovation Drive, Dublin
│ ├─ Headers:
│ │ ├─ List-Unsubscribe: <mailto:[email protected]>
│ │ └─ List-Unsubscribe-Post: List-Unsubscribe=One-Click
│ └─ Note: This confirmation email is NOT marketing — it is transactional
│
├─► Step 4: User Clicks Confirmation Link
│ ├─ Validate token: exists, not expired, not already used
│ ├─ If valid:
│ │ ├─ Update subscription status: "confirmed"
│ │ ├─ Record consent with full audit trail:
│ │ │ ├─ Initial request: timestamp, IP, user agent
│ │ │ ├─ Confirmation: timestamp, IP, user agent
│ │ │ └─ Consent text version hash
│ │ ├─ Add email to active marketing list
│ │ └─ Display: "Subscription confirmed! You'll receive updates from CloudVault."
│ │
│ ├─ If expired:
│ │ ├─ Display: "This link has expired. Please subscribe again."
│ │ └─ Delete pending record
│ │
│ └─ If already used:
│ └─ Display: "You're already subscribed."
│
└─► Step 5: Ongoing Management
├─ Every marketing email includes one-click unsubscribe (RFC 8058)
├─ Unsubscribe adds to suppression list (permanent)
├─ Consent records retained for demonstration per Art. 7(1)
└─ Re-consent requested after 24 months of inactivity
トークンの有効期限と再試行の処理
| シナリオ | アクション | 理由 |
|---|---|---|
| トークンの有効期限が切れた(48時間) | 保留中のレコードを削除し、リマインダーを送信しません | スパムのリスクを避けます。ユーザーは再登録できます |
| ユーザーが2回リクエストした | 1件が保留中の場合、2回目の確認メールは送信しません | メールの大量送信を防ぎます |
| メールがバウンスした | 保留中のレコードに「バウンス」のマークを付け、再試行しません | 無効なメールアドレスです |
| トークンが2回使用された | 「登録済み」ページを表示します | レコードの重複を防ぎます |
抑制リストの管理
抑制リストは、CAN-SPAM法第7704(a)(3)(A)条(配信停止処理を10日以内に行うこと)およびGDPR第17条3項(c)(法的義務の遵守のための保持)への準拠に不可欠です。
- 配信停止があった場合:そのメールアドレスを直ちに抑制リストに追加します
- 抑制リストは恒久的です:メールアドレスを抑制リストから自動的に削除してはいけません
- 送信前に確認します:マーケティングメールを送信する前、およびDOI確認メールを送信する前に、必ず抑制リストを確認します
- 抑制対象のメールアドレスで再登録があった場合:再登録を許可しますが、新たにDOI確認を求めます。確認リンクがクリックされた後にのみ、抑制リストから削除します
複数法域への準拠
| 要件 | GDPR + ePrivacy | CAN-SPAM(米国) | CASL(カナダ) |
|---|---|---|---|
| 同意の種類 | 事前オプトイン(DOIを推奨) | オプトアウト(ただし、DOIがベストプラクティス) | 明示的な同意(黙示の同意には制限あり) |
| 配信停止 | 第7条3項 — 同意を与える場合と同じくらい簡単に行える | 処理に10営業日 | 処理に10営業日 |
| 送信者の識別情報 | 第13条1項(a) | 実際の郵送先住所が必要 | 連絡先情報が必要 |
| 記録の保持 | 第7条1項 — 同意を立証する | オプトアウトのリクエストを3年間保持する | 同意記録を保持する |
| 罰則 | 最大2,000万ユーロ、または全世界の売上高の4% | メール1通あたり最大51,744ドル | 違反1件あたり最大1,000万カナダドル |
主な規制上の参考資料
- ePrivacy指令第13条 — 未承諾の通信
- GDPR第7条1項 — 同意の立証
- GDPR第7条3項 — 同意の撤回
- CAN-SPAM法(15 U.S.C. 7701-7713) — 米国の商用メール要件
- CASL(S.C. 2010, c. 23) — カナダのスパム対策法
- RFC 8058 — メーリングリストのメールヘッダーでワンクリック機能を通知する方法
- ドイツBGH VI ZR 269/12(2004年) — メールマーケティングの同意取得における標準としてのダブルオプトイン
- CNILの商業的勧誘に関する決議(2022年) — メール同意要件
コメント
Markdown 対応