关于 email-design
Email Design Skill 是用于邮件设计的技能,面向需要制作或改进品牌邮件的团队。它先形成结构化设计简报,再处理图片素材并转换为发送工具所需格式,且在审批前运行预览。
主要功能
- 01读取邮件平台及项目中的品牌信息
- 02按需提出最多三个问题
- 03选择设计类型并生成结构化简报
- 04查找或确认邮件图片素材
- 05转换为发送工具格式并预览
适用场景
- 01制作品牌新闻邮件或营销邮件
- 02重新设计或润色现有邮件
- 03为欢迎或召回邮件确定视觉方案
- 04在发送前预览邮件草稿
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ cosmoblk/ email-design --skill email-design安装后在 Claude Code 中输入/email-design确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.gitignoreLICENSEREADME.md详细介绍
邮件设计技能
打造独具特色、符合品牌调性的邮件。先生成结构化简报,再交由已连接的发送工具处理。内容自成一体。
何时使用
适用于以下请求:
- “起草 / 撰写 / 编写 / 设计 / 制作一封邮件”(新闻简报、营销活动、群发邮件、广播邮件、公告、欢迎邮件、挽回邮件、购后邮件、弃购邮件、促销邮件、事务性邮件)
- “让这封邮件没那么普通 / 不那么朴素 / 更符合品牌调性”
- “重新设计 / 评审 / 润色这封邮件”
- “通过 Nitrosend / Klaviyo / 等发送营销活动”
以下情况不适用:
- 仅讨论策略(“我应该多久发送一次?”)
- 仅讨论投递能力(“为什么我的邮件进了垃圾邮件?”)
- 平台选择(“Klaviyo 还是 Mailchimp?”)
- 仅撰写文案,不涉及设计
工作流程(五步)
- 检查上下文——从已连接的 ESP 和项目文件中提取品牌信息。暂不提问。
- 最多提出三个问题——只询问最关键的信息缺口。合并到一条消息中。
- 选择原型并撰写简报。 先确定原型,再开始撰写。
- 确定图片位置——从品牌网站、品牌素材中获取图片,或提示用户提供。
- 将简报转换为发送工具所需的格式,并在获得批准前运行干运行预览。
第 1 步 — 检查上下文(静默进行)
提取已有信息。暂时不要询问用户。
如果有可用的 Nitrosend MCP 工具(nitro_*):
- 读取
nitro://account资源,获取品牌字段(公司名称、品牌颜色、徽标、字体、实际地址,以及可能存在的品牌语气文档)。 - 调用
nitro_get_status查看入门配置状态和明显的信息缺口。 - 调用
nitro_query({ entity: "templates", limit: 3 })查看过往的设计风格。检查实际使用的版块、颜色、字体和语气。
如果连接的是其他 ESP,查找等效信息——大多数 ESP 都提供品牌或设置端点。如果 ESP 未知,则查看项目文件:BRAND.md、email-brand.md、PRODUCT.md,或顶层的 README.md,寻找语气线索。
在心中建立品牌资料档案,包含以下字段,并将每项标记为 known、inferable 或 missing:
- 公司名称、发件人名称、发件人邮箱、使命 / 标语
- 主品牌颜色(十六进制),以及次要颜色(如有)
- 徽标 URL
- 语气描述词(例如:创始人亲和、编辑风、俏皮、技术感、高端克制)
- 页脚必备信息:实际地址、社交媒体账号、退订处理方式
如果有三个或更多字段标记为 missing,可以提问。否则,使用推断值作为默认值,并在简报中注明。
第 2 步 — 最多三个问题(仅在必要时)
硬性上限:在一条消息中以编号列表提出三个问题。如果缺失字段更多,请使用合理的默认值并在简报中注明——不要盘问用户。
按优先级顺序,从缺失且对这封特定邮件有影响的项目中选出前三项:
- 邮件目的——这封特定邮件需要达成什么目标?(促使用户点击?讲述一个故事?确认某项操作?重新吸引流失用户?预告新品发布?)在会话中撰写第一封邮件时,几乎总值得询问。
- 语气风格——编辑风、粗犷单色、极简奢华、创始人信件、朋克 / 角色风格,还是造型画册风?仅在无法从过往模板判断语气时询问。
- 主品牌颜色——最好提供十六进制值。仅在缺少此信息且没有可提取颜色的徽标时询问。
- 使命陈述——用一句话说明公司为何存在(而非销售什么)。仅在页脚必需且缺失时询问。
- 社交媒体账号 + 实际地址——社交账号和一个用于页脚 / CAN-SPAM 的邮寄地址。仅在否则页脚信息不完整时询问。
如果用户已在本次会话前文回答过这些问题,不要重复询问。
第 3 步 — 选择原型,再撰写简报
拒绝敷衍。起草前先确定一种原型。最常见的问题是因为觉得“极简奢华”稳妥,就默认选它——但它可能只适用于 30% 的情况。其他时候,请有意识地选择。
风格类型
| 风格类型 | 适用场景 | 特征 | 参考品牌 |
|---|---|---|---|
| 编辑风 | 新闻简报、品牌故事、长篇内容 | 衬线字体标题、全幅照片、宽松行距、单栏、富有个性的语调 | Patagonia、Tracksmith、Lucy Folk |
| 大胆单色风 | 促销、发布、宣言 | 一种饱和色覆盖大面积表面、醒目的大字、精简文案 | Absolut、Liquid Death、Fly By Jing |
| 极简奢华风 | 高端、交易型内容、以克制作为定位 | 柔和的中性色调、472–520px 窄版面、一种强调色、留白充足、绝不以折扣为主导 | Stripe、Aesop、Apple、MoMA |
| 创始人信件风 | 欢迎、挽回客户、里程碑、鼓励回复 | 纯文本质感、第一人称、段落简短、署名收尾、没有模板装饰 | Ugmonk、Superhuman、Tracksmith CEO |
| 朋克 / 角色风 | 传递品牌声音、提升留存 | 个性鲜明、吉祥物或角色、诙谐不羁的文案、定制图像 | Frank Body、Duolingo、Liquor Loot、Chubbies |
| 画册风 | 产品、时尚、食品、涂料,以及产品本身就是设计的任何领域 | 编辑风格照片优先于文案、画廊式布局、全幅主视觉 | Dior、Clare Paint、Starbucks seasonal |
通用视觉法则
适用于所有风格类型。实现方式应与美学相匹配——大胆风格需要坚定果断,极简风格需要精准。
色彩
- 先选定策略,再选颜色:
- 克制 — 柔和的中性色 + 一种强调色,占表面面积 ≤10%。仅适用于交易型和极简奢华风格。
- 鲜明 — 一种饱和色覆盖表面面积的 30–60%。品牌形象邮件的默认选择。
- 浸染 — 整个表面就是这种颜色。适用于主视觉和宣言式邮件。
- 不要使用纯
#000或#fff。所有中性色都应偏向品牌色调。 - 在极亮或极暗的明度下,高彩度会显得刺眼;越接近黑色或白色,越要降低饱和度。
- 类别反射检查。 如果有人仅凭类别就能猜出配色——金融科技 → 海军蓝 + 金色,健康生活 → 白色 + 鼠尾草绿,AI → 黑色 + 霓虹色,电商 → 千禧粉 + 奶油色——就重新设计。训练数据中的惯性会让邮件变得乏味。
排版
- 每封邮件使用一个字体家族。只有在有明确功能需求时才添加第二个。
- 正文 14–16px。标题 22–34px。各层级之间的比例 ≥1.25。
- 行长最多 50–65 个字符。
- 不要使用渐变文本。不要使用
background-clip: text。通过字重或字号强调,而不是使用特效。
布局
- 单栏。宽度 472–600px。过宽会显得像桌面端布局,并且在移动设备上显示异常。
- 调整间距以形成节奏。处处使用相同内边距会显得像线框图。
- 卡片是偷懒的做法。只有在确实最适合时才使用。嵌套卡片永远不对。
- 触控目标 ≥44×44px。
留白(这是大多数 AI 起草的邮件最容易出问题的地方)
大模型默认会过度留白——每个区块的上方和下方都留出宽裕的内边距,还会添加独立的间隔行。结果就像一片月球荒原。请通过以下方式加以纠正:
- 不要孤立的间隔区块。 连续出现两个
spacer区块绝对不对。合并处理。 - 内边距不对称。 大多数区块使用:
padding_top: 0, padding_bottom: 32。让下一个区块的顶部内边距(或没有顶部内边距)来决定节奏。 - 主视觉紧贴页眉。 主视觉图片与页眉之间不留间隙(≤8px),在主视觉下方留出充足空间,而不是上下两侧都留。
- 结尾规则。 页脚前的最后一个内容区块:
padding_bottom: 32–48px,绝不能更多。页脚有自己的顶部内边距。 - 绝不要: 连续两个空段落、区块之间使用双
<br>、同一侧同时设置 margin 和 padding、用空的text区块充当间隔。
无论平台是否会执行空白裁剪流程,这些规则都适用——双重保险。
图片
- 仅使用真实摄影作品或委托创作的插画。不要使用图库素材、粗制滥造的 AI 图片或纯粹用于装饰的扁平几何图形。
- 首屏主视觉必须有明确用途:展示产品、人物、地点或某个时刻。单纯装饰不够。
- 每张图片 ≤200KB;总载荷 ≤800KB。
- 每张图片都要添加替代文本。为约 33% 会屏蔽图片的人群提供备用内容。
- 深色模式:Logo 和图标使用透明 PNG;背景使用米白色(不要用纯白色)。
文案
- 采用倒金字塔结构。开篇直接给出答案。
- 段落简短。每个词都要有价值。
- 不要重复标题。不要用引言段落重复主题。
- 正文中不要使用长破折号(—)或短破折号(–)。使用逗号、冒号、分号、句号和括号。不要使用
--。 - 首屏可见区域上方放置一个 CTA。底部可以再放一个 CTA。超过两个就会削弱效果。
- 主题 ≤45 个字符。预览文本 ≤90 个字符。两者都必须补充信息,不能重复主题。
内容简报(结构化)
编写各个部分之前,先将简报写成 JSON。这是发送工具的输入内容,请将其视为约定。
{
"name": "Campaign or template name",
"subject": "subject line ≤45 chars",
"preheader": "preheader ≤90 chars adding new info",
"archetype": "editorial | bold-mono | minimal-lux | founder-letter | punk-character | lookbook",
"color_strategy": "restrained | committed | drenched",
"primary_color": "#hex",
"secondary_color": "#hex or null",
"voice_descriptors": ["e.g. founder-personal", "wry", "concrete"],
"structure": [
{ "kind": "header", "logo": true, "padding": "compact" },
{ "kind": "hero", "image_slot": "<slot-id>" },
{ "kind": "headline", "content": "..." },
{ "kind": "body", "content": "..." },
{ "kind": "cta", "label": "...", "url": "..." },
{ "kind": "secondary_body", "content": "..." },
{ "kind": "footer" }
],
"image_slots": [
{
"slot_id": "hero",
"purpose": "what it must convey",
"candidate_url": "<url-from-brand-site or null>",
"user_prompt": "<text to show user if no candidate>"
}
],
"footer": {
"mission_line": "exact verified copy from brand fields or brand site, or null — never invent",
"socials": [{ "name": "instagram", "url": "..." }],
"physical_address": "one line",
"unsubscribe": "{{unsubscribe_url}}"
},
"anti_slop_checks": ["no category-reflex palette", "real imagery", "distinctive voice"]
}
第 4 步 — 确定图片位置
每个 image_slot 都必须以真实候选 URL 或明确询问用户的提示结尾。按以下优先级查找来源:
- 已上传的品牌素材。 如果已连接 Nitrosend:
nitro_query({ entity: "media" })。优先使用现有素材,不要先获取新素材。 - 品牌网站。 使用 WebFetch 获取
https://<brand-domain>/,并查找:<meta property="og:image">- 首页首屏主视觉图片(查找
<section class="hero"> img、<header> img、[data-hero] img、文件名中包含 banner 的图片) /press、/about或/blog页面上的人物肖像和生活方式图片- 优先选择长边 ≥1200px 的图片。
- 品牌社交账号。 用于人物肖像和生活场景,可查找 Instagram 或 X 账号图片。
- 询问用户一次。 具体描述,并提供选项:“我设想的首屏主视觉是 [X]。你有合适的图片吗?或者要不要先留个占位符,之后再通过媒体上传器添加?”
绝不要伪造图片或用 AI 生成图库风格的图片。明确标注的占位符也胜过粗制滥造的图片。
如果上传了新图片且品牌使用 Nitrosend:nitro_ingest_image({ url: "...", purpose: "hero" })。
第 5 步 — 翻译简报并交接
将简报的 structure 数组映射到发送工具的区块类型。对于 Nitrosend nitro_compose_campaign:
| 简报类型 | Nitrosend 区块 | 说明 |
|---|---|---|
| header | 如果 Logo 位于 theme.logo_url 中,则省略;否则使用 image | Logo 高度为 32–48px |
| hero | image | 全宽,无侧边内边距;仅当图片可点击时才设置 link_url |
| headline | 使用 <h1> 或 <h2> 标记的 text | 上方不要添加单独的间隔区块;让下一个区块的顶部内边距来保持节奏 |
| body | text | 段落简短 |
| cta | button | 单个 CTA,在移动设备上全宽显示 |
| secondary_body | text | 可选 |
| divider | divider | 每封邮件最多一次 |
| footer | footer | 如果已配置账户页脚,则自动渲染;否则显式构建 |
调用时覆盖留白设置
编排内容时覆盖平台默认的内边距设置。即使平台会进行留白裁剪,也要这样做。
{
"type": "image",
"props": {
"src": "...",
"alt": "...",
"padding_top": 0,
"padding_bottom": 24
}
}
每个区块的默认规则:padding_top: 0, padding_bottom: 32。只有说明原因时才覆盖。
页脚——大多数 AI 邮件最容易出错的部分
优秀的页脚应按以下顺序排列:
- 使命宣言。 一句话。说明公司为何存在,而不是销售什么。(“为跑者而造。诞生于波士顿。”胜过“自 2014 年起提供高端运动服饰。”)不要猜测或编造。 从以下来源之一逐字提取:已连接的 ESP 品牌字段(Nitrosend:品牌上的
company_description,也可在 Brand 设置中查看),或品牌的首页/关于页面(首屏副标题、页脚标语、“我们相信……”文案)。如果两者都找不到确切且经过验证的文案,就完全省略使命宣言——缺少使命宣言也好过编造。 - 社交媒体图标。 最多 3–5 个。使用真实账号和真实 URL。图标尺寸为 24–32px。
- 实体地址。 CAN-SPAM 要求提供。单行显示。
- 退订链接。 清晰可见,不要小到难以辨认。使用“退订”一词,不要用藏得很深的“偏好设置”委婉说法。CAN-SPAM 和 Gmail/Yahoo 群发邮件规则均要求提供。
- 可选项: 标语、联系邮箱、“您收到此邮件的原因……”说明。
视觉样式:较小字号(12–13px),使用与正文对比度相当于 60–70% 的柔和中性色文字,内部留白充足,上方不要再加多余间距。
交接
始终先运行 dry-run,并始终在用户批准正式发送前展示预览 URL。询问用户是否需要测试邮件。
nitro_compose_campaign({
name: brief.name,
subject: brief.subject,
preheader: brief.preheader,
sections: <translated from brief.structure with explicit padding>,
theme: {
brand_color: brief.primary_color,
bg_color: ...,
text_color: ...,
font_body: ...,
font_heading: ...,
logo_url: ...
},
audience: { audience_type: "lists", contact_list_ids: [...] },
dry_run: true
})
然后从响应中显示预览 URL。只有用户确认后,才能继续正式发送。
提供测试发送
dry-run 预览后、正式发送前,询问:
“要我先给你发送一封测试邮件吗?我可以发送到 [from_email from account] 或其他地址——告诉我即可。”
默认收件人为账号的 from_email 或已保存的测试收件人,但用户指定任何地址都应接受。如果用户同意,就通过平台的测试端点发送,并显示结果。
对于 Nitrosend:
nitro_send_test_message({
template_id: <id from compose response>,
email: "<recipient>"
})
对于其他 ESP,使用相应的端点(Nitrosend REST API 上为 POST /v1/my/templates/{id}/send_test;其他平台使用类似端点)。测试邮件送达后,询问正式发送前是否还需要进行最后调整。
交接前检查清单
撰写前在心中检查。若有三项或更多不符合要求,就重新起草。
- 主题 ≤45 个字符,并补充信息
- 预览文本 ≤90 个字符,且不重复主题内容
- 采用一种设计原型,并始终保持一致
- 确定配色策略(除非是 minimal-lux,否则不要下意识地选择“中性色 + 强调色”)
- 不要使用受品类惯例影响的配色
- 至少使用一张真实图片,并注明来源或明确提示需要图片
- 首屏内有一个 CTA;总数 ≤2 个
- 页脚包含社交媒体链接 + 实体地址 + 退订链接(仅在使命宣言经过验证时才添加——绝不编造)
- 不要出现双重间距,不要使用
<br><br>,不要同时搭配 margin 和 padding - 正文中不使用 em dash
- 单列宽度 ≤600px;触控目标 ≥44px
- 文风能让人认出这是品牌,而不是模板
- 正式发送前已向用户提供测试发送选项
应对反馈的模式
用户希望迭代时:
- “再大胆一点” → 提升配色策略的强度(克制 → 坚定 → 浓烈),增强文字对比度,缩短行长,换用 bold-mono 或 punk-character 设计原型。
- “再低调一点” → 降低配色强度,有选择地增加留白(不要均匀增加,否则会显得空旷),移除次要 CTA,换用 minimal-lux 或 editorial 设计原型。
- “增加个性” → 换用 founder-letter 或 punk-character 设计原型;改用第一人称文案;加入一个出人意料的元素(手写素材、吉祥物、夸张的主题行)。
- “太普通了” → 几乎总是说明设计原型不合适。如果默认选择了 minimal-lux,问一次用户是否更想要 bold-mono 或 lookbook。
- “看起来像 AI 做的” → 原因可能是受品类惯例影响的配色、像图库素材的图片,或缺乏品牌语气。判断具体是哪一项,只修正该项。
示例
简报——SaaS 欢迎邮件(founder-letter)
{
"name": "Welcome 1 — Founder Hello",
"subject": "you're in",
"preheader": "a quick note from the founder, plus what to expect this week",
"archetype": "founder-letter",
"color_strategy": "restrained",
"primary_color": "#1f2933",
"voice_descriptors": ["first-person", "concrete", "warm", "no marketing fluff"],
"structure": [
{ "kind": "header", "logo": true, "padding": "compact" },
{ "kind": "headline", "content": "Hey, I'm [name]." },
{ "kind": "body", "content": "Three short paragraphs. What we built, why we built it, what to do this week." },
{ "kind": "cta", "label": "Reply with one thing you're trying to do", "url": "mailto:..." },
{ "kind": "footer" }
],
"image_slots": [],
"footer": {
"mission_line": "Building [thing] so [who] can [outcome].",
"socials": [{ "name": "linkedin", "url": "..." }],
"physical_address": "...",
"unsubscribe": "{{unsubscribe_url}}"
},
"anti_slop_checks": ["plain-text feel keeps it personal", "no stock imagery", "single CTA is a reply, not a click"]
}
简报——D2C 产品发布(bold-mono,浓烈风格)
{
"name": "Launch — Nitro Blue Drop",
"subject": "blue.",
"preheader": "the new colorway. limited run. tomorrow 9am.",
"archetype": "bold-mono",
"color_strategy": "drenched",
"primary_color": "#1d4ed8",
"voice_descriptors": ["punchy", "confident", "few words"],
"structure": [
{ "kind": "hero", "image_slot": "hero" },
{ "kind": "headline", "content": "Blue." },
{ "kind": "body", "content": "Limited to 200. 9am tomorrow." },
{ "kind": "cta", "label": "Set a reminder", "url": "..." },
{ "kind": "footer" }
],
"image_slots": [
{
"slot_id": "hero",
"purpose": "Single product shot on solid background. Same blue as primary_color. No text overlay.",
"candidate_url": "https://brand.com/og-image.jpg",
"user_prompt": "Got the product photo of the blue colorway? Drop the URL or upload via the media uploader."
}
],
"footer": {
"mission_line": "Made for runners. Made in [city].",
"socials": [
{ "name": "instagram", "url": "..." },
{ "name": "tiktok", "url": "..." }
],
"physical_address": "...",
"unsubscribe": "{{unsubscribe_url}}"
},
"anti_slop_checks": ["committed to one colour", "real product photo, not stock", "no double-padding"]
}
简报——编辑风格的简报(Patagonia 风格)
{
"name": "Newsletter — Running gear for winter's worst",
"subject": "running gear for winter's worst",
"preheader": "what we wear when it's brutal out there",
"archetype": "editorial",
"color_strategy": "committed",
"primary_color": "#0a3d2e",
"voice_descriptors": ["earnest", "specific", "outdoorsy", "sells the weather, not the product"],
"structure": [
{ "kind": "header", "logo": true, "padding": "compact" },
{ "kind": "hero", "image_slot": "winter-trail" },
{ "kind": "headline", "content": "When the weather wins, you don't." },
{ "kind": "body", "content": "Short essay — 120 words on running in horizontal sleet. No product names yet." },
{ "kind": "cta", "label": "See the kit", "url": "..." },
{ "kind": "secondary_body", "content": "Three pieces, briefly. Photo above each, not in a grid card." },
{ "kind": "footer" }
],
"image_slots": [
{
"slot_id": "winter-trail",
"purpose": "Editorial landscape — runner small in frame, weather doing the talking. No product close-ups in the hero.",
"candidate_url": null,
"user_prompt": "Have a winter trail / weather shot? Or shall I leave a placeholder?"
}
],
"footer": {
"mission_line": "We're in business to save our home planet.",
"socials": [{ "name": "instagram", "url": "..." }],
"physical_address": "...",
"unsubscribe": "{{unsubscribe_url}}"
},
"anti_slop_checks": ["no category-reflex green-and-brown palette", "hero sells the moment, not the product", "voice carries the email, not the design chrome"]
}