关于 double-opt-in-email
用于设计双重确认邮件订阅流程的实用技能,面向处理营销同意的团队,涵盖验证、抑制名单和多司法辖区合规要求。
主要功能
- 01两步式邮件同意流程
- 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)是电子邮件营销同意的黄金标准。它需要两个步骤:(1)用户提交电子邮件地址并表示有兴趣;(2)用户点击验证邮件中的确认链接。这样便能创建可验证的同意记录,满足 GDPR 第 7(1) 条(可证明性)、《电子隐私指令》第 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 小时) | 删除待处理记录,不发送提醒 | 避免垃圾邮件风险;用户可以重新订阅 |
| 用户重复请求 | 如已有待处理请求,则不发送第二封确认邮件 | 防止邮件泛滥 |
| 邮件退信 | 将待处理记录标记为“已退信”,不重试 | 电子邮件地址无效 |
| 令牌被使用两次 | 显示“已订阅”页面 | 防止重复记录 |
抑制名单管理
抑制名单对于遵守《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% | 每封邮件最高 51,744 美元 | 每次违规最高 1,000 万加元 |
主要法规参考
- 《电子隐私指令》第 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