关于 pre-send-qa
Pre-Send QA 是一项在发送前检查邮件广告系列或粘贴内容的技能。它检查个性化字段、链接、垃圾邮件信号、合规要求、渲染和无障碍性;通过 MCP 连接时还会检查发送背景,但不会自动编辑广告系列。
主要功能
- 01检查合并标签及备用文本
- 02验证链接和 UTM 一致性
- 03检查退订与合规要素
- 04标记垃圾邮件信号和渲染风险
- 05MCP 模式下检查受众与发送时间
适用场景
- 01安排发送前审查 ESP 广告系列
- 02未连接 ESP 时检查粘贴的邮件 HTML
- 03发送前发现失效链接或缺失的退订信息
MCP 相关
连接 Cogny MCP 和 ESP 后,可读取广告系列或草稿,并检查收件人数、细分受众、发送时间及重复发送。粘贴模式无需 MCP,但不检查发送背景。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ cognyai/ claude-code-marketing-skills --skill pre-send-qa安装后在 Claude Code 中输入/pre-send-qa确认已加载。
详细介绍
发送前质量检查
在邮件发送给订阅者之前,先发现那些令人尴尬的问题。对邮件进行全面的发送前检查:合并标签回退值、失效链接、垃圾邮件触发词、CAN-SPAM / GDPR 页脚、移动端渲染、大小限制、无障碍性。
需要: Campaign ID 模式需要 Cogny MCP。粘贴 HTML 模式无需 MCP(但不进行发送上下文检查)。
用法
/pre-send-qa <campaign-or-draft-id> — 检查 ESP 中的指定活动(或 Get a Newsletter 中的草稿)
/pre-send-qa — 然后按提示粘贴邮件 HTML/MJML/文本
步骤
1. 加载邮件
模式 A — Campaign ID(MCP)。 检测已连接的 ESP(检查两个命名空间:mcp__cogny__<svc>__* 和 mcp__<svc>__*),并使用相应工具:
| ESP | 获取工具 | ID 对应的对象 |
|---|---|---|
| Klaviyo | get_campaign | 活动对象 |
| Mailchimp | tool_get_campaign | 活动对象 |
| Rule | tool_get_campaign | 活动对象 |
| Get a Newsletter — 发送前 | tool_get_draft | 尚未发送的草稿 |
| Get a Newsletter — 发送后取证 | tool_get_sent + tool_get_report | 已发送项目 |
对于每个 ESP,提取:主题、预览文本、发件人名称、发件人邮箱、回复地址、HTML 正文、文本正文、目标细分受众/列表、计划发送时间。还要获取关联列表/受众的规模,以便第 2.8 节获得收件人数。
Get a Newsletter 没有单一的“活动”对象。 如果用户提供了 ID,先尝试 tool_get_draft(发送前质量检查是常见用途);如果返回 404,则回退到 tool_get_sent。如果他们想检查已计划的发送任务,则使用 tool_list_scheduled 查找。
模式 B — 粘贴:
- 请用户提供主题、预览文本、发件人名称/邮箱和邮件正文 HTML。接受多行粘贴。
- 粘贴模式跳过第 2.8 节(发送上下文)——没有收件人数、细分受众或计划发送时间。
2. 执行检查清单
逐项检查所有类别。每项标记为 [PASS]、[WARN] 或 [FAIL],并指出具体的问题内容。
2.1 邮件头与路由
- 主题不能为空 — 不得为空
- 主题长度 ≤ 55 个字符(移动端截断阈值)
- 预览文本不能为空 — 不得为空,也不能与主题重复
- 预览文本长度为 85–100 个字符(太短会浪费空间;太长则会被截断)
- 发件人名称体现品牌 — 不能是 “noreply” 或 “info”
- 发件人邮箱使用发送子域名 — 对批量邮件而言,标记来自
@gmail.com/@outlook.com的地址(严重影响送达率) - 回复地址有人监控 — 如果是 noreply@,则发出警告
2.2 合并标签 / 个性化
扫描正文、主题和预览文本,查找:
{{ ... }}、{% ... %}、*|...|*、[[...]]、%%...%%、{...}— 具体取决于 ESP 语法- 所有合并标签格式正确 — 括号成对,代码块已闭合
- 所有合并标签都有回退值 — 例如,
{{ first_name|default:"there" }}(Klaviyo)、*|IFNOT:FNAME|*there*|ELSE:*|FNAME|**|END:IF|*(Mailchimp)。任何没有回退值的标记都标记为 FAIL。 - “Hi ,”或“Hello ,”反模式 — 搜索问候语后直接跟标点符号的情况。这是最常见、最令人尴尬的合并标签故障。
- 动态内容块已闭合 — 开始的
{% if %}必须有对应的{% endif %};循环也一样 - 主题中没有原始标记 — 例如,主题直接显示为 “Hi {{ first_name }}”
2.3 链接
从 HTML 中提取所有 <a href="...">。对每个链接:
- URL 为绝对 URL — 不能有不带域名的
href="/path";除非是有意设置的锚点,否则不能有href="#"。 - URL 可访问 — 对每个唯一 URL 执行 HEAD 检查(最多 30 个请求,去重)。标记非 200 响应。
- 不含
localhost/127.0.0.1/.local— 可能泄漏开发环境信息。 - 不含预发布/开发域名 — 标记
*.staging.*、*.dev.*、stage.、preprod. - 所有外链都包含 UTM 参数 — 对缺少
utm_source/utm_medium/utm_campaign的链接发出警告。 - UTM 一致性 — 所有链接应使用相同的
utm_campaign;标记不一致的链接。 - 链接数量 — 报告总数。超过 20 个时发出警告(过于杂乱);少于 1 个时发出警告(没有 CTA)。
- CTA 目标一致性 — 多个标注为“立即购买”的按钮通常应指向相同的 URL。
2.4 图片
- 所有
<img>都有alt文本 — 文本非空且有描述性。 - 不能是纯图片邮件 — 如果文本与图片的比例中,文本占比低于 40%,则标记。仅包含主视觉图片的邮件会触发垃圾邮件过滤器。
- 图片 URL 是绝对 URL,且使用 HTTPS
- 图片 URL 不从可疑主机热链 — 如果图片托管在
imgur、cloudinary demo等平台,而非品牌 CDN,则标记。
2.5 合规性
- 包含退订链接 — 使用正则表达式匹配
unsubscribe、preferences、opt out。 - 退订链接可见 — 不能设置为
display:none或font-size:1px。 - 页脚包含实体邮寄地址 — CAN-SPAM 要求。使用正则表达式匹配街道/城市格式;若缺失则标记。
- List-Unsubscribe 标头 — 如果 ESP 支持设置但尚未配置,则标记(Gmail/Yahoo 要求群发邮件发送者支持一键退订)。
- 偏好设置中心链接 — 建议提供;如果只有退订链接,则发出警告。
2.6 垃圾邮件触发因素
扫描主题、预览文本和正文,查找常见触发因素并报告命中项:
- 词语: free、winner、congratulations、guaranteed、risk-free、act now、click here、limited time、no obligation、viagra(哈哈)、make money、earn extra、$$$
- 标点: 主题中超过一个
!、!!!、??? - 大小写: 主题中长度超过 3 个字符的全大写单词
- 符号:
$$$、★、过多的表情符号(超过 3 个) - HTML: 隐藏文本(颜色与背景相同)、极小字号、嵌入式 JavaScript、
<body>上的背景图片
为每个命中项提供上下文:
🔴 Subject contains "!!!"
🟡 Body has 4 instances of ALL CAPS words: "LIMITED", "TODAY", "ACT NOW", "DON'T"
2.7 渲染与大小
- HTML 大小 < 102 KB — Gmail 会在 102 KB 处截断。报告实际大小。
- 采用单一根
<table>布局(桌面邮件标准)或使用 MJML — 将 flex/grid 标记为投递风险。 - 使用内联 CSS — 检查
style属性,而非<style>块。许多客户端会移除<head>中的样式。 - 包含移动端视口 meta 标签 —
<meta name="viewport" content="width=device-width"> - 字体栈包含后备字体 —
font-family: "Custom Font";后不能没有适用于 Web 的后备字体。 - 不含
<script>、<form>,也不通过 JS 加载外部字体 — 大多数客户端都会移除这些内容。
2.8 发送上下文(仅限 MCP 模式)
- 目标细分群体中有收件人 — 收件人数 > 0。
- 促销邮件不会发送给整个列表 — 存在可用的细分群体时,若目标是“所有订阅者”,则标记。
- 计划发送时间不是收件人当地时间凌晨 3 点 — 标记不合理的发送时段。
- 不是重复发送 — 检查过去 30 天内是否有发送给同一细分群体且主题相同的营销活动。
3. 报告
Pre-send QA: <campaign name | "pasted email">
Recipient count: <N> Send ETA: <time or "not scheduled">
Overall: <READY TO SEND | FIX BEFORE SEND | CRITICAL ISSUES>
🔴 Critical (will break or embarrass)
— <specific issue with offending text / URL / line>
— ...
🟡 Warnings (fix if you have time)
— ...
🟢 Passed
— <count> checks passed
──
Recommended fix order:
1. ...
2. ...
Merge-tag fallback cheatsheet for <ESP>:
[ESP-specific syntax examples]
4. 创建问题(可选)
如果发现严重问题,且营销活动即将发送,则创建问题:
{
"title": "Campaign '<name>' has critical QA issues — blocked send",
"body": "<enumerated issues>",
"action_type": "pre_send_fix",
"priority": "high"
}
5. 不要自动修复
切勿自动修改营销活动。始终展示差异,并让用户批准每项修复。
备注
- ESP 专用合并标签语法:
- Klaviyo:
{{ first_name|default:"there" }} - Mailchimp:
*|FNAME|*,并搭配*|IFNOT:FNAME|*there*|ELSE:*|FNAME|**|END:IF|* - Rule / Get a Newsletter:
[Firstname],并搭配平台专用的回退语法
- Klaviyo:
- 垃圾邮件触发词列表只是启发式规则;现代垃圾邮件过滤器会使用机器学习和信誉度。请将警告视为“提高警惕,检查信誉度”,而非“立即判定为垃圾邮件”。