mcpField
E
email-design

email-design

github.com/cosmoblk设计与 UI7143 次安装25 周前更新
代码仓库

关于 email-design

Email Design Skill 是用于邮件设计的技能,面向需要制作或改进品牌邮件的团队。它先形成结构化设计简报,再处理图片素材并转换为发送工具所需格式,且在审批前运行预览。

主要功能

  1. 01读取邮件平台及项目中的品牌信息
  2. 02按需提出最多三个问题
  3. 03选择设计类型并生成结构化简报
  4. 04查找或确认邮件图片素材
  5. 05转换为发送工具格式并预览

适用场景

  1. 01制作品牌新闻邮件或营销邮件
  2. 02重新设计或润色现有邮件
  3. 03为欢迎或召回邮件确定视觉方案
  4. 04在发送前预览邮件草稿

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/cosmoblk/email-design --skill email-design

安装后在 Claude Code 中输入/email-design确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

.gitignore
LICENSE
README.md

详细介绍

邮件设计技能

打造独具特色、符合品牌调性的邮件。先生成结构化简报,再交由已连接的发送工具处理。内容自成一体。

何时使用

适用于以下请求:

  • “起草 / 撰写 / 编写 / 设计 / 制作一封邮件”(新闻简报、营销活动、群发邮件、广播邮件、公告、欢迎邮件、挽回邮件、购后邮件、弃购邮件、促销邮件、事务性邮件)
  • “让这封邮件没那么普通 / 不那么朴素 / 更符合品牌调性”
  • “重新设计 / 评审 / 润色这封邮件”
  • “通过 Nitrosend / Klaviyo / 等发送营销活动”

以下情况不适用:

  • 仅讨论策略(“我应该多久发送一次?”)
  • 仅讨论投递能力(“为什么我的邮件进了垃圾邮件?”)
  • 平台选择(“Klaviyo 还是 Mailchimp?”)
  • 仅撰写文案,不涉及设计

工作流程(五步)

  1. 检查上下文——从已连接的 ESP 和项目文件中提取品牌信息。暂不提问。
  2. 最多提出三个问题——只询问最关键的信息缺口。合并到一条消息中。
  3. 选择原型并撰写简报。 先确定原型,再开始撰写。
  4. 确定图片位置——从品牌网站、品牌素材中获取图片,或提示用户提供。
  5. 将简报转换为发送工具所需的格式,并在获得批准前运行干运行预览。

第 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 步 — 最多三个问题(仅在必要时)

硬性上限:在一条消息中以编号列表提出三个问题。如果缺失字段更多,请使用合理的默认值并在简报中注明——不要盘问用户。

按优先级顺序,从缺失且对这封特定邮件有影响的项目中选出前三项:

  1. 邮件目的——这封特定邮件需要达成什么目标?(促使用户点击?讲述一个故事?确认某项操作?重新吸引流失用户?预告新品发布?)在会话中撰写第一封邮件时,几乎总值得询问。
  2. 语气风格——编辑风、粗犷单色、极简奢华、创始人信件、朋克 / 角色风格,还是造型画册风?仅在无法从过往模板判断语气时询问。
  3. 主品牌颜色——最好提供十六进制值。仅在缺少此信息且没有可提取颜色的徽标时询问。
  4. 使命陈述——用一句话说明公司为何存在(而非销售什么)。仅在页脚必需且缺失时询问。
  5. 社交媒体账号 + 实际地址——社交账号和一个用于页脚 / 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 或明确询问用户的提示结尾。按以下优先级查找来源:

  1. 已上传的品牌素材。 如果已连接 Nitrosend:nitro_query({ entity: "media" })。优先使用现有素材,不要先获取新素材。
  2. 品牌网站。 使用 WebFetch 获取 https://<brand-domain>/,并查找:
    • <meta property="og:image">
    • 首页首屏主视觉图片(查找 <section class="hero"> img、<header> img、[data-hero] img、文件名中包含 banner 的图片)
    • /press、/about 或 /blog 页面上的人物肖像和生活方式图片
    • 优先选择长边 ≥1200px 的图片。
  3. 品牌社交账号。 用于人物肖像和生活场景,可查找 Instagram 或 X 账号图片。
  4. 询问用户一次。 具体描述,并提供选项:“我设想的首屏主视觉是 [X]。你有合适的图片吗?或者要不要先留个占位符,之后再通过媒体上传器添加?”

绝不要伪造图片或用 AI 生成图库风格的图片。明确标注的占位符也胜过粗制滥造的图片。

如果上传了新图片且品牌使用 Nitrosend:nitro_ingest_image({ url: "...", purpose: "hero" })。


第 5 步 — 翻译简报并交接

将简报的 structure 数组映射到发送工具的区块类型。对于 Nitrosend nitro_compose_campaign:

简报类型Nitrosend 区块说明
header如果 Logo 位于 theme.logo_url 中,则省略;否则使用 imageLogo 高度为 32–48px
heroimage全宽,无侧边内边距;仅当图片可点击时才设置 link_url
headline使用 <h1> 或 <h2> 标记的 text上方不要添加单独的间隔区块;让下一个区块的顶部内边距来保持节奏
bodytext段落简短
ctabutton单个 CTA,在移动设备上全宽显示
secondary_bodytext可选
dividerdivider每封邮件最多一次
footerfooter如果已配置账户页脚,则自动渲染;否则显式构建
调用时覆盖留白设置

编排内容时覆盖平台默认的内边距设置。即使平台会进行留白裁剪,也要这样做。

{
  "type": "image",
  "props": {
    "src": "...",
    "alt": "...",
    "padding_top": 0,
    "padding_bottom": 24
  }
}

每个区块的默认规则:padding_top: 0, padding_bottom: 32。只有说明原因时才覆盖。

页脚——大多数 AI 邮件最容易出错的部分

优秀的页脚应按以下顺序排列:

  1. 使命宣言。 一句话。说明公司为何存在,而不是销售什么。(“为跑者而造。诞生于波士顿。”胜过“自 2014 年起提供高端运动服饰。”)不要猜测或编造。 从以下来源之一逐字提取:已连接的 ESP 品牌字段(Nitrosend:品牌上的 company_description,也可在 Brand 设置中查看),或品牌的首页/关于页面(首屏副标题、页脚标语、“我们相信……”文案)。如果两者都找不到确切且经过验证的文案,就完全省略使命宣言——缺少使命宣言也好过编造。
  2. 社交媒体图标。 最多 3–5 个。使用真实账号和真实 URL。图标尺寸为 24–32px。
  3. 实体地址。 CAN-SPAM 要求提供。单行显示。
  4. 退订链接。 清晰可见,不要小到难以辨认。使用“退订”一词,不要用藏得很深的“偏好设置”委婉说法。CAN-SPAM 和 Gmail/Yahoo 群发邮件规则均要求提供。
  5. 可选项: 标语、联系邮箱、“您收到此邮件的原因……”说明。

视觉样式:较小字号(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"]
}

评论

支持 Markdown