Documentation menu

联系人与从 MailInApp 发送

除了为你的 ESP 导出 HTML之外,你还可以直接从仪表盘发送已完成的邮件——发给单个联系人、一部分选中对象,或整个名单。发送仍然通过你自己的 SMTP 中继进行,所以你的发信域名和信誉始终归你所有。

联系人列表

联系人标签页保存你的名单。每个名单都有一个 email 列(这正是它可以用来发送邮件的原因),此外还可以有任意你想要的列——姓名、套餐、城市——每一列同时也是工作室中的一个 {{field}} 合并标签。

联系人列表和其他数据源一样。在工作室的数据面板中以受众角色连接它,它就会同时成为邮件的发送对象,以及裸 {{field}} 合并标签按收件人取值的来源——画布会用真实的联系人数据进行预览。参见数据源与合并标签

导入 CSV

联系人已经存放在别处了?导入 CSV(在联系人标签页,或在某个名单内部以便追加到该名单)接受 ESP 和电子表格导出的文件:逗号、分号或 Tab 分隔,带表头行。带引号的值、Excel 的 BOM 以及 "" 转义都可以正确处理。

表头名称会成为你的列。如果没有列命名为 email,导入程序会查找真正包含邮箱地址的列(例如"E-Mail Address"),并将其用作邮箱列。在你点击保存之前不会存储任何内容,所以你可以先查看——并修正——这张表格。

导出 CSV

在某个名单上(以及在屏蔽面板上)点击下载 CSV,随时可以获得一份快照备份——在进行大规模筛选发送之前很有用,或者只是为了保留一份平台外的副本。它可以通过上面同一个导入程序原样导回。

一次性配置发送方式

直接发送需要在设置中配置好一种发送方式,可以用以下两种方式之一:

  • 还没有 ESP?验证你自己的域名,MailInApp 就会代表你发送——不需要生成或轮换任何 SMTP 凭据。如果你还没有支持 SMTP 的服务商,这是推荐的默认做法。
  • 已经有 ESP 了?把 MailInApp 指向它的 SMTP 中继——SendGrid、Brevo、Mailgun、Amazon SES,甚至用于小规模测试的 Gmail 应用专用密码都可以。任何提供 SMTP 端点的服务商都可以使用。使用测试并保存在首次发送前验证连接。你的 SMTP 密码是一项凭据:仅存储在服务器端,并且在其他任何地方显示时都会被遮蔽。

两种方式都进入同一个发送流水线——手动发送、定时发送以及本页面上的其他一切,在两种方式下的行为完全相同。

先发送一封测试邮件

在发送给你的名单之前,使用发送测试邮件给自己(或任何人)发一份完整渲染的副本。它会预填你的账户邮箱,主题会加上 [Test] 前缀,并带有一个真实可用的实时预览链接,因此互动模块是真正可以测试的。测试发送不会触碰你的数据源,不计入 200 位收件人上限,也不会出现在发送历史中。

发送

在仪表盘上某封邮件的卡片中,点击发送:

  1. 收件人来自这封邮件的受众——即在工作室数据面板中以受众角色连接的联系人列表。还没有连接名单?可以在这里直接选择一个。
  2. 选择所有人,或勾选单个联系人——发给一位联系人只是一次单行选择。已经发送过的行会标注上次发送日期,方便你了解已经触达过谁(这只是提示信息——不会为你更改选择)。
  3. 设置主题(合并标签在这里同样有效,✨ 建议会用 AI 起草几个备选项——参见AI 辅助文案),然后发送。

每个收件人都会收到自己专属的编译邮件:合并标签会根据其所在行解析,并附带一个个人专属的已签名实时预览链接。互动模块会以静态回退层级渲染,采用链接优先的互动方式。投票选项和评分都是先确认后记录的链接;表单和轮播图会打开托管的实时预览。这封邮件在任何客户端都能正常工作,并且绝不会因为一次单纯的链接预抓取而记录任何内容。

A/B 测试

最多可以再添加 4 个变体(总共 2 到 5 个)来对一次发送进行拆分测试。每个变体都可以更改主题、发件人身份,或者通过指向另一个项目来更改整封邮件的内容。每个收件人都会根据其邮箱地址被确定性地分配到某个变体,所以重试和重发绝不会打乱谁看到了哪个变体。

可以选择开启自动挑选获胜者,先只给一部分样本发送邮件,待收集到足够数据后,MailInApp 会把表现最好的变体发送给其余所有人。参见A/B 测试与自动获胜者。定时发送计划目前仍只支持单一变体;定时发送表单中没有变体选择器。

细分你的受众

在收件人列表上方,受众筛选器会针对你数据源的字段构建一条规则(例如 ticket_status = Resolvedresolved_date 在最近 7 天以内),然后将筛选器应用于选择范围会把你的选择设置为当前所有匹配项——这是一个滚动分群,而不是一次性的手动挑选。结合规则的方式(AND/OR)与你在工作室中为模块可见性条件所使用的方式相同。

小范围试投

小范围试投会从你当前的选择中随机抽取一部分——设置一个百分比并点击抽样,先向这一部分发送。对结果满意后,选择剩余未发送对象会选中名单中所有尚未收到这封邮件的人,这样后续的正式一轮就绝不会对样本重复发送。

折扣优惠

一旦某个受众的联系人列表连接了 Shopify 或 WooCommerce 店铺,工作室的模块面板就会提供一个电商折扣模块——它是购买历史分群的搭档:先匹配出过去的买家,再真正给他们一些好处。像其他任何模块一样把它拖到邮件的任意位置;在没有连接店铺之前,它在面板中不可见。

设置折扣百分比或固定金额、折扣码的有效天数、在向同一联系人再次提供折扣前需要等待的天数,以及可选的范围——一个基于你已同步的商品目录的可搜索选择器——用来把折扣限定在某一件商品而不是整个店铺。在每位匹配收件人的邮件渲染之前,MailInApp 会在你自己连接的店铺上生成一个真实的一次性折扣码(Shopify 折扣码或 WooCommerce 优惠券,限定为该客户的邮箱专用),并围绕它构建模块自身的代码展示和"立即购买"按钮——不需要手动放置任何合并标签。开启显示到期倒计时会在同一张卡片上添加一张倒计时图片,与折扣码自身的到期时间同步。

有几点值得了解:

  • 兑换完全发生在你自己店铺的结账页面——而不是 MailInApp 自身的商品模块结账流程。这是有意为之:一个基于真实店铺购买记录细分出来的受众已经在那家店购物,所以折扣直接复用该店铺现有的库存、税务和定价规则,而不是搭建第二套收银系统。
  • 每个模块都独立生成和进入冷却期,按该模块本身计——在同一封邮件中放入多个折扣模块(或在多个项目中复用同一个模块)绝不会让一个模块的折扣码阻塞另一个的生成。
  • 收件人的订单仍会按照与其他店铺点击相同的方式归因回发出该折扣码的营销活动——参见跟踪 Shopify 订单、结账与营收
  • 如果某位收件人的生成失败(店铺未连接,或某个令牌需要重新连接),该收件人的邮件仍会照常发送——只是会显示模块的纯文本兜底文案,而不是真实折扣码。折扣模块的任何问题都绝不会阻止发送。
  • 定时发送计划会以与手动发送相同的方式处理这一点,每次运行都会生成一个全新的折扣码——滚动窗口式的定时发送计划绝不会发出上一次运行时的过期折扣码。
  • 如果要针对某一件具体商品设置折扣,且完全不需要受众筛选,商品模块自带一个独立的单品折扣开关——两者的比较见平台原生折扣,完整演示见Shopify 单品折扣码 / WooCommerce 单品折扣码

定时发送计划

有些受众会随时间变化——"3 到 7 天前已解决"这条规则每天匹配到的行都不一样。定时发送计划会按计划(每天或每周,选定的 UTC 小时)重新针对所关联数据源的当前行评估你的受众筛选器。它只会发送给尚未收到这封邮件的匹配对象,从上一次运行结束的地方继续。每次运行都会写入一条普通的发送历史记录,与手动发送相同。如果某个定时发送计划连续三次运行都对所有收件人发送失败,它会自动禁用自己,而不会悄悄地耗尽你的整个名单。

定时发送计划也可以设置为一次性(指定日期)而不是循环节奏——一次性发送会在指定日历日期触发,然后自动禁用自己,而不会重复。这与12 个月营销活动日历为此发送安排计划按钮底层使用的机制相同:在日历上选择一个日期,它就会创建一个针对那个项目、在那一天发送的一次性定时发送计划,这样日期到了你就不需要再回来手动发送。

从你的服务台或 CRM 推送联系人

不必在每次发送前都重新导出一份 CSV,联系人列表可以直接接受推送。在联系人标签页的名单设置中为该名单生成一个API 密钥,然后让你自己的系统(服务台自动化、CRM 工作流)调用:

POST /api/datasources/<datasourceId>/rows
Authorization: Bearer <apiKey>
Content-Type: application/json

{ "rows": [{ "email": "[email protected]", "ticket_status": "Resolved" }] }

行会按小写邮箱进行更新插入(upsert)——已知地址会原地更新,新地址会追加——现有行绝不会被重新排序或删除,因为响应归因是按位置进行的(row:<n>),重新排序会破坏历史关联。每批最多 500 行,并按密钥进行速率限制。密钥在生成(或重新生成)时只会显示一次,之后在所有地方都会被遮蔽,与 MailInApp 中其他任何凭据一样;撤销会在不触碰现有数据行的情况下停用这项集成。

发送历史

每一次真实发送(测试发送不计)都会被记录,并显示在收件人选择器上方——日期、主题,以及发送成功、失败或跳过的数量。刷新页面时客户端绝不会删除任何内容;发送历史是"实际已发出内容"的权威来源。

取消订阅与屏蔽

页脚预设中包含一个 {{unsubscribe_url}} 合并标签,它会解析为该特定收件人专属的一键取消订阅页面。取消订阅是账户范围内生效的:它会把该地址从你发送邮件所使用的每一个项目中屏蔽,而不仅仅是他们点击取消订阅的那一个——收件人绝不需要为每个营销活动分别退订。

你的 SMTP 中继在发送时同步拒收的地址(无效邮箱、中继拒绝)也会以同样的方式被屏蔽,这样一个失效地址就不会在未来每次发送时都被重试。(中继先接受消息、之后异步退信的情况,如果没有 ESP 专属的 Webhook 是无法观察到的——目前不在范围之内。)

被屏蔽的地址会在联系人标签页上显示已退信已取消订阅标签。两者都可以重新订阅——一个满溢的邮箱或一次误点击不一定是永久性的——并且被屏蔽的行会在未来的发送中自动跳过(并与发送失败分开报告)。

发送之后

与 ESP 发送完全相同:互动数据会流入响应,按联系人分组,如果你配置了 Webhook,它也会针对每个事件触发。

限制

  • 每次发送最多 200 位收件人(一个名单,一次定时发送计划的运行)。对于更大的受众,请使用导出与 ESP 工作流程;定时发送计划也会在下一次运行时自动补上剩余的收件人。
  • 没有有效邮箱地址的行会被跳过,并在发送后予以报告。
  • 导入 CSV 时会丢弃在同一文件中较早已经出现过的重复邮箱地址所在的行,这样重新导入一份有重叠的导出文件就不会产生重复发送——你会看到一条"已跳过 N 个重复邮箱"的提示。
  • 联系人推送 API 将每批限制为 500 行