产品介绍
青鸟商邮是国内专业的邮件发送平台, 为企业提供安全、简单快速、精准高效的营销、通知和事务邮件的推送服务。同时提供了全链路实时跟踪的精准智能数据分析,可直观看到邮件发送的送达率、打开率和点击率等,并且清晰了解投递失败原因,帮助下次提升发信质量。
借助网易20多年的邮件技术积累,我们服务可达全球各地的邮箱地址,邮件到达率远超同行。
快速开始
注册与登录
注册
若你尚未注册,点击此处,正确填写表单并通过激活邮件激活即可。
第一份邮件
系统已经为你准备好了测试的域名和发件地址,上传直邮模板后可直接发送。 完成发送后,可在任务详情中查看发送结果及数据。
由于国家法律法规要求,请测试发送前先完成实名及手机号验证。
免费额度
每个账号均享有250封的免费发送额度,请尽情试用。
正式使用
- 正式使用前,请先进行企业认证及购买资源包。
- 请务必另外创建真实业务使用的域名及发信地址,不要使用系统提供的测试域名及发信地址进行真实业务使用。
日常优化
如何提高发送效率和发送效果,可以参看以下几点:
- 同一个域名下事务性邮件和营销邮件不要混合发送
- 发送前对收件列表检查,减少邮箱地址不存在及格式错误
- 邮件内容不要违规,不要粗制滥造,不要相同邮件内容反复使用
邮件配置
域名
成功注册账户后,系统会自动分配一个测试发信域名。
正式使用前,请务必创建真实业务使用的域名,不要使用系统提供的测试域名进行真实业务业务使用。
创建域名需要完成必要的配置, 才能使用其进行发信。 这些配置项是保证域名能够优质出信的基础。
发信域名的配置包括 SPF、DKIM、DMARC、MX,其中SPF、DKIM、DMARC都为必填项。
- 选择 【发送设置】- 【域名】,进入发信域名配置界面。如果没有发信域名,可以新增发信域名,每个账号最多可以创建 2个发信域名。
- 点击需要配置的域名,进入配置界面。按照系统给出的配置数据,到你的域名管理系统中做相关配置
-
以主域名 sampledomain.com为例添加记录:
-
SPF验证,假设系统给出配置值为:v=spf1 include:spf.mail-bird.com -all,在域名管理系统中:
- 主机记录填入: @
- 记录类型选择:TXT
- 记录值中填入:v=spf1 include:spf.mail-bird.com -all
- 如果您同时使用多个邮件推送服务商,记录值中需要保留多个服务商的域名,例如: v=spf1 include:spf.mail-bird.com include:domain1.com -all ,其中 domain1.com 是其他邮件推送服务商的域名。请确保您发信域名的 DNS 配置中只有1条 SPF 记录。
-
DKIM验证,假设系统给出配置值为:v=DKIM1;k=rsa;p=M, 在域名管理系统中:
- 主机记录填入:mailbird._domainkey
- 记录类型选择:TXT
- 记录值中填入v=DKIM1;k=rsa;p=M
-
DMARC验证,假设系统给出配置值为
v=DMARC1; p=none,在域名管理系统中:
- 主机记录填入:_dmarc
- 记录类型选择:TXT
- 记录值填入 v=DMARC1; p=none
-
MX记录验证:
- 记录类型选择:MX
- 主机记录填入:ext1.mail-bird.com. 注意末尾需要包含“.“。
- 如果已经有企业邮箱服务,不需要改动。
-
SPF验证,假设系统给出配置值为:v=spf1 include:spf.mail-bird.com -all,在域名管理系统中:
域名配置后有两种状态:
- 未验证:必配项SPF,DKIM ,DMARC中任一项未通过
- 已验证:配置项全部验证通过
完成所有记录配置后,域名管理系统上生效可能需要 10-30 分钟
请给事务性邮件和营销性邮件设置不同的域名(拥有不同主域的域名),以避免共享一个发信域名导致两类邮件同时被限制,邮件无法及时送达。
发信地址
发信域名是一封邮件的出处. 在 SMTP 会话过程中, 即是 mail from 的后缀。
- 选择邮件配置>发信地址,进入“发信地址” 配置页面,单击新建
- 进入新建发信地址配置,请选择您的发信域名,填入邮箱前缀和发件人别名后,单击提交即可完成保存。
邮件发送
- 进入邮件发送 ,您可以看到发送任务列表。发送任务列表展示每个发送任务的详细信息,包括发送进度、任务类型、任务状态以及请求数量
- 选择邮件发送 ,进入邮件发送配置页面
- 选择或导入发件人地址,输入邮件主题,选择发件人,上传对应的邮件模板,确认无误后,单击发送即可将指定的邮件内容发送完成。
邮件变量
邮件中的变量是文本片段,在发送邮件时会自动替换为收件人资料中的信息。
使用变量,您可以批量发送个性化邮件,而无需手动输入个人信息并将邮件单独发送给每个收件人。
例如,您可以在邮件副本中使用 ${first_name}或 ${phone}}
变量一次对整个列表自动进行个性化设置,这样每个收件人都会收到一封包含其个人资料中相关数据的邮件。
以下为使用邮件变量示范:
1. 向邮件模板添加变量
在邮件编辑器中,您可以通过两种方式向邮件内容或标题添加变量。
- 从工具栏添加
- 单击邮件编辑器工具栏上“插入” - “变量”
- 输入变量名称,例如name
-
手动输入变量
您可以手动输入变量或在创建邮件内容时复制粘贴它。
- 输入变量引用前缀括号 ${
- 输入变量名
- 关闭括号}
例如:您可以试试手动输入 ${name}
按照上述操作,正确添加的变量将显示为确认变量有效的图标
如果命名错误,如包含等非法字符,系统将不会识别为变量而作为邮件普通文本。
2. 向收件人添加变量信息
发送带有变量的邮件时,收件人需通过文件方式导入,导入的文件中必须包含与邮件模板中相应的信息。信息字段名称与变量一致。
如邮件模板中含有 ${name} , ${code}, ${gender}
三个变量,则上传的收件人列表必须 email, name, code, gender
这四列字段,如下所示:
name | code | gender | |
---|---|---|---|
lilei@163.com | 李雷 | 13812345678 | 先生 |
wangmeimei@126.com | 王美美 | 15912345689 | 女士 |
3. 检查效果并发送
已编辑完成邮件,上传了带变量信息的收件人,可以预览检查各个收件人收到个性化邮件的效果。
确认无误后即可发送。
特殊变量
退订链接
邮件编辑器中可以插入自定义退订链接。您可自定义取消订阅的链接文案,如:单击此处取消订阅。系统将转化为取消订阅链接。
如需自定义退订链接样式,请将自定义样式的链接设置为${ECS_UNSUB_URL} .
如:
<a href=${ECS_UNSUB_URL}> 单击此处取消订阅</a>
查看全文
部分邮件服务商会屏蔽邮件中图片内容。
为保证用户能看到完整邮件,可以加入查看全文链接,点击可以查看完整全文。
邮件编辑器中可以插入查看全文链接,并支持自定义文案,如:单击此处查看全文。系统将转化为查看全文链接。
如需自定义样式,请将样式的跳转链接设置为${ECS_SHOW_URL},如:
<a href=${ECS_SHOW_URL}>单击此处查看全文</a>
账号设置
修改密码
如需修改密码请联系客服协助修改。
认证
根据 《中华人民共和国网络安全法》 及相关法律的规定,以及按工信部、通信管理局、公安等有关监管单位要求,自定义发送邮件需完成企业信息认证。否则网络运营者停止对其提供相关服务。因此在你正式使用时,需要先完成企业认证。
企业认证可从点击顶部【企业认证】可进入。
用户需完善企业信息、企业邮箱认证与证件资质审核后,购买资源包和配置自定义域名发送邮件。
企业资质审核时,将参考您企业信息中填写的已完成 ICP 备案的网站主页中所公示的企业邮箱进行审核,请认真填写。
认证后,您发送的邮件在网易域内会显示企业认证信息,提升用户对您邮件的信任度,从而提升邮件点击率。
后续如需要修改企业认证信息或更换管理员,请联系客服协助修改。
使用记录
从顶部个人中心-使用记录中查看到所有资源包使用记录
计费规则
平台会在发送任务创建时预扣额度,随后实际按照平台发送成功的邮件扣减额度。 平台成功包括以下状态:
- 发送成功
- 投递成功但因对方账号服务器拒绝或容量满拒收
- 投递成功但由对方服务器认为垃圾邮件
平台失败包含以下状态:
- 因为平台服务故障导致未能进行信件投递
开具发票
如需开具发票,请联系客服登记开具。
发票统一使用顺丰快递寄送,且不收取费用。
青鸟商邮平台开放接口对接文档
合作方有自己的发信平台的,可购买对应的套餐后对接本文档中的相关接口完成发送
1.接口请求方式
1.1 API地址
https://mkt.mail.163.com/open
1.2 请求结构
接口采用http或https实现交互,参数以form(application/x-www-form-urlencoded)的方式提交,暂不支持JSON、XML格式的参数,数据采用MD5方式加密。
1.3 公共参数
调用每个接口都需要携带的请求参数
变量名 | 名称 | 是否必须 | 说明 |
---|---|---|---|
userKey | 秘钥名称 | 是 | 发信秘钥功能下添加的秘钥名称 |
signTimestamp | 签名时间戳 | 是 |
签名时间 格式采用UTC,时区为Asia/Shanghai yyyy-MM-dd’T’HH:mm:ss.SSS’Z 如2023-04-25T12:19:27.547Z 请求有效期为服务器与此时间前后2分钟内 |
sign | 签名串 | 是 | MD5签名;详见签名方法 |
1.4 签名方法
采用MD5计算签名,userKey和userSecret在平台界面生成,具体计算方法如下:
-
假设共有三个参数 a=3、b=2、c=1;(userKey 和 userSecret 不参与运算)
-
按参数名的字母正序排列,再用“&”连接后得到串A,即为“a=3&b=2&c=1”;
-
将userKey和userSecret拼接到串A后面,假设appId为test,salt为“dAYqFk”,则拼接后为“a=3&b=2&c=1testdAYqFk”;
-
计算拼接串的MD5即为最终签名值,注意使用UTF-8编码计算。
举例:
参数:a=3、b=2、c=1;
userKey:test
userSecret: dAYqFk
最终签名串:bf96a4c2efbc75e5692bbc313816e1de
注:value为空的,不参与签名。
- JAVA版本示例代码如下:
import org.apache.commons.lang.StringUtils;
import org.springframework.util.DigestUtils;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.stream.Collectors;
public class SignUtil {
public static final String KEY_SIGN = "sign";
public static final String KEY_USER_KEY = "userKey";
public static final String KEY_USER_SECRET = "userSecret";
private static final List<String> IGNORE_PARAM = new ArrayList<>(3);
static {
IGNORE_PARAM.add(KEY_SIGN);
IGNORE_PARAM.add(KEY_USER_KEY);
IGNORE_PARAM.add(KEY_USER_SECRET);
}
public static String getSign(String userKey, String userSecret, Map<String,String> paramMap) {
if (StringUtils.isBlank(userKey)) {
throw new IllegalArgumentException("user key is blank");
}
if (StringUtils.isBlank(userSecret)) {
throw new IllegalArgumentException("user secret is blank");
}
if (paramMap == null || paramMap.isEmpty()) {
return DigestUtils.md5DigestAsHex( (userKey + userSecret).getBytes(StandardCharsets.UTF_8) );
}
String paramString = paramMap.keySet().stream()
.sorted()
.filter(i -> !IGNORE_PARAM.contains(i))
.filter(i -> StringUtils.isNotBlank(paramMap.get(i)))
.map(i -> i + "=" + paramMap.get(i))
.collect(Collectors.joining("&"));
return DigestUtils.md5DigestAsHex( (paramString + userKey + userSecret).getBytes(StandardCharsets.UTF_8) );
}
public static void main(String[] args) {
Map<String,String> param = new HashMap<>();
param.put("a", "3");
param.put("b", "2");
param.put("c", "1");
System.out.println(param);
System.out.println(getSign("test", "dAYqFk", param));
}
}
2.接口定义
2.1 账号相关接口
2.1.1 账号信息
2.1.1.1 简介
获取当前账号的额度
2.1.1.2 URL
GET/POST API地址/account/info
2.1.1.3 请求参数
无
2.1.1.4 返回结果
返回JSON
{
"code": 200,
"desc": "DONE",
"success": "true",
"result": {
"account": "test@163.com",
"balance": 1000
}
}
字段说明
字段名 | 类型 | 说明 |
---|---|---|
code | String | 返回码,参考附录 |
desc | String | 返回码说明 |
result.account | String | 青鸟商邮账号 |
result.balance | Number | 剩余发信额度 |
2.2 域名相关接口
2.2.1 列表查询
查询所有域名的基本信息
2.2.1.1 URL
GET API地址/domain/list
2.2.1.2请求参数
无
2.2.1.3 返回结果
2.2.1.4 返回值示例
{
"code": 200,
"desc": "DONE",
"success": "false",
"result": [
{
"id": 61,
"domain": "mail-bird.com",
"status": 0,
"total": 0,
"type": 2
},
{
"id": 66,
"domain": "mail.abc.com",
"status": 1,
"total": 1,
"type": 2
}
]
}
字段说明
字段名 | 类型 | 说明 |
---|---|---|
code | Number | 返回码,参考附录 |
desc | String | 返回码说明 |
result | List<SenderDomain> | 返回值 |
SenderDomain
字段名 | 类型 | 说明 |
---|---|---|
id | Number | 唯一标识符 |
domain | String | 域名 |
status | Number | 验证状态 0:待验证 1:已验证 |
total | Number | 该域名已创建的发信地址数量 |
type | Number |
域名类型,用于标识该域名的用途: 1:事务 2:营销 |
2.3发信地址相关接口
2.3.1 列表查询
查询所有发信地址的基本信息
2.3.1.1 URL
GET API地址/address/list
2.3.1.2 请求参数
无
2.3.1.3 返回结果
返回值示例
{
"code": 200,
"desc": "DONE",
"success": "false",
"result": [
{
"id": 98,
"prefix": "mark",
"alias": "mark",
"createTime": 1681210992477,
"updateTime": 1681210992477,
"domainId": 66,
"domain": "mail.abc.com",
"domainStatus": 1
}
]
}
字段说明
字段名 | 类型 | 说明 |
---|---|---|
code | Number | 返回码,参考附录 |
desc | String | 返回码说明 |
result | List<SenderAddress> | 返回值 |
SenderAddress
字段名 | 类型 | 说明 |
---|---|---|
id | Number | 发信地址唯一标识符 |
prefix | String | 发信地址前缀 |
alias | String | 发信地址别名 |
createTime | Number | 发信地址创建时间 |
updateTime | Number | 发信地址更新时间 |
domainId | Number | 对应域名唯一标识符 |
domain | String | 域名 |
domainStatus | Number | 域名验证状态 0:待验证 1:已验证 |
2.4 发送相关接口
2.4.1 邮件模板创建
2.4.1.1 简介
创建一个邮件模板,可用于事务性/营销性发送
2.4.1.2 URL
POST API地址/tmpl/create
2.4.1.3 请求参数
变量名 | 名称 | 是否必须 | 说明 |
---|---|---|---|
sender | 发送的sender | 是 | 邮件sender |
senderName | 发送的senderName | 是 | 邮件senderName |
title | 邮件标题 | 是 | 邮件标题,可包含变量。变量详见3.3 |
content | 邮件内容 | 是 | 邮件内容,可包含变量。变量详见3.3 |
lang | 退订语言 | 否 | 退订语言 |
replyTo | 回复邮箱 | 否 | 收件人可对该邮箱账号进行回复。 |
summary | 邮件摘要 | 否 | 邮件摘要,最多128个字符 |
adFlag | ad标识 | 否 |
为发送邮件主题前增加AD字样,添加AD标识的邮件可能会被邮箱服务商分类进入广告邮件收件箱,防止被拒收。 布尔值,默认为false |
attachments | 附件 | 否 | 字符串类型,JSON数组的字符串,格式是[{“name”:“附件名称”,“link”:“附件上传返回的link”}],其中name不传则为附件上传时的文件名,最长为50个字符。当前最多上传一个附件 |
unsubNoticeTmpl | 退订提示文案 | 否 |
需与unsubClickTmpl同时不为空,若有退订文案配置,退订文案配置比退订语言优先。 参考: 如果您希望不再收到此类邮件,请点击退订。其中 "如果您希望不再收到此类邮件,请点击"为unsubNoticeTmpl,"退订"为unsubClickTmpl,可点击 |
unsubClickTmpl | 退订点击文案 | 否 |
需与unsubNoticeTmpl同时不为空,若有退订文案配置,退订文案配置比退订语言优先。 参考: 如果您希望不再收到此类邮件,请点击退订。其中 "如果您希望不再收到此类邮件,请点击"为unsubNoticeTmpl,"退订"为unsubClickTmpl,可点击 |
2.4.1.4 返回结果
返回JSON
{
"code": 200,
"desc": "DONE",
"success": "true",
"result": {
"id": 30000001
}
}
字段说明
字段名 | 类型 | 说明 |
---|---|---|
code | String | 返回码,参考附录 |
desc | String | 返回码说明 |
id | Number | 邮件模板id |
2.4.2 邮件模板更新
2.4.2.1 简介
更新邮件模板
2.4.2.2 URL
POST API地址/tmpl/update/{id}
2.4.2.3 请求参数
变量名 | 名称 | 是否必须 | 说明 |
---|---|---|---|
id | 模板id | 是 | 模板id,传参在path |
sender | 发送的sender | 是 | 邮件sender |
senderName | 发送的senderName | 是 | 邮件senderName |
title | 邮件标题 | 是 | 邮件标题,可包含变量。变量详见3.3 |
content | 邮件内容 | 是 | 邮件内容,可包含变量。变量详见3.3 |
lang | 退订语言 | 否 | 退订语言 |
replyTo | 回复邮箱 | 否 | 收件人可对该邮箱账号进行回复。 |
summary | 邮件摘要 | 否 | 邮件摘要,最多128个字符 |
adFlag | ad标识 | 否 |
为发送邮件主题前增加AD字样,添加AD标识的邮件可能会被邮箱服务商分类进入广告邮件收件箱,防止被拒收。 布尔值,默认为false |
attachments | 附件 | 否 | 字符串类型,JSON数组的字符串,格式是[{“name”:“附件名称”,“link”:“附件上传返回的link”}],其中name不传则为附件上传时的文件名,最长为50个字符。当前最多上传一个附件 |
unsubNoticeTmpl | 退订提示文案 | 否 |
需与unsubClickTmpl同时不为空,若有退订文案配置,退订文案配置比退订语言优先。 参考: 如果您希望不再收到此类邮件,请点击退订。其中 "如果您希望不再收到此类邮件,请点击"为unsubNoticeTmpl,"退订"为unsubClickTmpl,可点击 |
unsubClickTmpl | 退订点击文案 | 否 |
需与unsubNoticeTmpl同时不为空,若有退订文案配置,退订文案配置比退订语言优先。 参考: 如果您希望不再收到此类邮件,请点击退订。其中 "如果您希望不再收到此类邮件,请点击"为unsubNoticeTmpl,"退订"为unsubClickTmpl,可点击 |
2.4.2.4 返回结果
返回JSON
{
"code": 200,
"desc": "DONE",
"success": "true"
}
字段说明
字段名 | 类型 | 说明 |
---|---|---|
code | String | 返回码,参考附录 |
desc | String | 返回码说明 |
2.4.3 单播/组播
2.4.3.1 简介
可以针对1~100个以内的用户进行发送
2.4.3.2 URL
POST API地址/send/simple
2.4.3.3 请求参数
变量名 | 名称 | 是否必须 | 说明 |
---|---|---|---|
tmplId | 模板id | 是 | 模板id |
token | 幂等key | 是 | 幂等使用,32字符以内 |
uid | 收件人 | 是 | 多个请用英文逗号隔开,最多支持100个 |
statisticKey | 统计key | 否 | 查询数据统计使用的key,只能由字母和数字组成 |
params | 变量列表 | 否 | 变量列表,字符串类型。详见3.3 |
eachParams | 变量列表 | 否 | 变量列表,字符串类型。详见3.3 |
2.4.3.4 返回结果
返回JSON
{
"code": 200,
"desc": "DONE",
"success": "true",
"result": {
"sendId": "973192381879062528"
}
}
字段说明
字段名 | 类型 | 说明 |
---|---|---|
code | String | 返回码,参考附录 |
desc | String | 返回码说明 |
sendId | String | 发送id,建议进行关联保存,方便排查问题 |
2.4.4 测试发送
2.4.4.1 简介
测试发送
2.4.4.2 URL
POST API地址/send/test
2.4.4.3 请求参数
变量名 | 名称 | 是否必须 | 说明 |
---|---|---|---|
sender | 发送的sender | 是 | 邮件sender |
senderName | 发送的senderName | 是 | 邮件senderName |
title | 邮件标题 | 是 | 邮件标题,可包含变量。变量详见3.3 |
content | 邮件内容 | 是 | 邮件内容,可包含变量。变量详见3.3 |
lang | 退订语言 | 否 | 退订语言 |
uid | 收件人 | 是 | 收件人 |
replyTo | 回复邮箱 | 否 | 收件人可对该邮箱账号进行回复。 |
summary | 邮件摘要 | 否 | 邮件摘要,最多128个字符 |
adFlag | ad标识 | 否 |
为发送邮件主题前增加AD字样,添加AD标识的邮件可能会被邮箱服务商分类进入广告邮件收件箱,防止被拒收。 布尔值,默认为false |
params | 变量列表 | 否 | 变量列表,字符串类型。详见3.3 |
attachments | 附件 | 否 | 字符串类型,JSON数组的字符串,格式是[{“name”:“附件名称”,“link”:“附件上传返回的link”}],其中name不传则为附件上传时的文件名,最长为50个字符。当前最多上传一个附件 |
unsubNoticeTmpl | 退订提示文案 | 否 |
需与unsubClickTmpl同时不为空,若有退订文案配置,退订文案配置比退订语言优先。 参考: 如果您希望不再收到此类邮件,请点击退订。其中 "如果您希望不再收到此类邮件,请点击"为unsubNoticeTmpl,"退订"为unsubClickTmpl,可点击 |
unsubClickTmpl | 退订点击文案 | 否 |
需与unsubNoticeTmpl同时不为空,若有退订文案配置,退订文案配置比退订语言优先。 参考: 如果您希望不再收到此类邮件,请点击退订。其中 "如果您希望不再收到此类邮件,请点击"为unsubNoticeTmpl,"退订"为unsubClickTmpl,可点击 |
2.4.4.4 返回结果
返回JSON
{
"code": 200,
"desc": "DONE",
"success": "true"
}
字段说明
字段名 | 类型 | 说明 |
---|---|---|
code | String | 返回码,参考附录 |
desc | String | 返回码说明 |
2.4.5 直邮附件上传接口
2.4.5.1 简介
直邮中需要带附件的,请先调用此接口上传获取link地址,
ps:此接口请使用Content-Type: form-data,公共参数带在url
2.4.5.2 URL
POST API地址/tmpl/attachment/upload
2.4.5.3 请求参数
变量名 | 名称 | 是否必须 | 说明 |
---|---|---|---|
file | 文件 | 是 | 文件 |
fileName | 自定义的文件名 | 否 | 选传,若不传默认是文件名 |
contentType | 指定MIME类型 | 否 | 选传,不传默认从文件识别 |
md5 | md5 | 是 | md5值 |
2.4.5.4 返回结果
返回JSON
{
"code": 200,
"desc": "DONE",
"success": "true",
"result": {
"link": "xxxxxx"
}
}
字段说明
字段名 | 类型 | 说明 |
---|---|---|
code | String | 返回码,参考附录 |
desc | String | 返回码说明 |
link | String | 附件link |
2.5 数据统计相关接口
2.5.1 数据详情
2.5.1.1 简介
获取任务/指定统计key 下的发送、到达、打开、点击、退订 数据
2.5.1.2 URL
GET/POST API地址/statistic/data
2.5.1.3 请求参数
变量名 | 名称 | 是否必须 | 说明 |
---|---|---|---|
statisticKey | 统计key | 是 | 统计key,只能由字母和数字组成 |
startTime | 统计开始时间 | 是 | 毫秒时间戳, 与结束时间差值小于等于30天 |
endTime | 统计结束时间 | 是 | 毫秒时间戳, 与开始时间差值小于等于30天 |
2.5.1.4 返回结果
返回JSON
{
"code": 200,
"desc": "DONE",
"success": "true",
"result": {
"successCnt": 1,
"failureCnt": 0,
"openPv": 1,
"openUv": 1,
"clickPv": 0,
"clickUv": 0,
"unsubCnt": 0,
"sentCnt": 0,
"realSentCnt": 0,
"resultDetail": {
"201": 100,
"202": 300
}
}
}
字段说明
字段名 | 类型 | 说明 |
---|---|---|
code | String | 返回码,参考附录 |
desc | String | 返回码说明 |
successCnt | Number | 发送成功数 |
failureCnt | Number | 发送失败数 |
openPv | Number | 打开pv |
openUv | Number | 打开uv |
clickPv | Number | 点击pv |
clickUv | Number | 点击uv |
unsubCnt | Number | 退订数量 |
sentCnt | Number | 预计发送数量 |
realSentCnt | Number | 实际发送数量(去掉退订的账号) |
resultDetail | Map<String, Number> | 失败分类数据,参考附录3.2 |
2.5.2 数据明细下载
2.5.2.1 简介
获取指定统计key 下的发送、到达、打开、点击、退订 明细
2.5.2.2 URL
GET/POST API地址/statistic/download/detail
2.5.2.3 请求参数
变量名 | 名称 | 是否必须 | 说明 |
---|---|---|---|
statisticKey | 统计key | 否 | 统计key,只能由字母和数字组成 |
startTime | 统计开始时间 | 是 | 毫秒时间戳, 与结束时间差值小于等于30天 |
endTime | 统计结束时间 | 是 | 毫秒时间戳, 与开始时间差值小于等于30天 |
2.5.2.4 返回结果
返回excel二进制流,文件名为:明细查询结果_yyyyMMdd_HHmmss.xlsx,可直接进行下载
Content-Type: application/x-msdownload
2.6 发送拦截相关接口
2.6.1 列表查询
查询主动拦截/客户退订相关信息
2.6.1.1 URL
GET API地址/intercept/list
2.6.1.2 请求参数
变量名 | 名称 | 说明 | 默认值 |
---|---|---|---|
page | 页码 | 页码;由1开始 | 1 |
pageSize | 每页数量 | 每页数量;范围1~100 | 10 |
type | 类型 | 类型: 1. 主动添加类型 2. 客户退订类型 |
1 |
2.6.1.3 返回结果
返回值示例
{
"code": 200,
"desc": "DONE",
"success": "false",
"result": {
"list": [
{
"id": 4,
"email": "aaa@163.com",
"sender": "mark@mail.abc.com",
"senderId": 98,
"type": 1,
"updateTime": 1683298798475,
"interceptAll": false
},
{
"id": 2,
"email": "a@163.com",
"sender": "@",
"senderId": 0,
"type": 1,
"updateTime": 1683269918051,
"interceptAll": true
}
],
"total": 2
}
}
字段说明
字段名 | 类型 | 说明 |
---|---|---|
code | Number | 返回码,参考附录 |
desc | String | 返回码说明 |
result.list | SenderIntercept | 拦截信息 |
result.total | Number | 数量 |
SenderIntercept
字段名 | 类型 | 说明 |
---|---|---|
id | Number | 拦截信息唯一ID(仅type=1时有) |
String | 收信地址 | |
sender | String | 发信地址 |
senderId | Number | 对应发信地址ID(仅type=1时有) |
type | Number | 类型: 1. 主动添加 2. 客户退订 |
updateTime | Number | 更新时间 |
interceptAll | Boolean | 是否拦截所有发信地址 |
3. 附录
3.1 返回码定义
返回码code | 描述 | 备注 |
---|---|---|
200 | 请求成功 | 无 |
202 | 参数异常 | 详细原因请看desc字段 |
203 | 拒绝访问 | 非法行为 |
207 | 内部错误,不建议重试 | 请联系客服处理 |
208 | 服务暂时不可用,建议重试几次 | 重试无效后建议联系客服处理 |
209 | userKey参数异常 | 没传或者userKey不存在 |
210 | 签名异常 | 签名不存在或者不正确 |
211 | 时间戳异常 | 时间戳不存在或者时间不正常 |
5004 | 垃圾文件 | 垃圾文件 |
5005 | 附件上传次数达到限制 | 附件上传次数达到限制 |
6001 | 余额不足 | 发送余额不足 |
6003 | 内容非法 | 内容非法 |
6006 | 测试发送数量限制 | 测试发送数量达到上限 |
3.2 发送失败分类定义
code | 描述 | 备注 |
---|---|---|
200 | 发送成功 | 无 |
201 | 对方账户无效 | 无 |
202 | 对方拒收 | 无 |
203 | 对方邮箱已满 | 无 |
204 | 超过发送上限 | 无 |
205 | 判为垃圾邮件 | 无 |
501 | 收件人地址不存在或被停用 | 无 |
502 | 发信IP,域名或账号被加黑 | 无 |
503 | 发信配置校验失败 | 无 |
504 | 被收信服务器判为垃圾邮件 | 无 |
505 | 被收信服务器判为病毒邮件 | 无 |
506 | 邮箱账号格式不规范 | 无 |
507 | 发信频率超过收信服务器限制 | 无 |
508 | 收信服务器临时故障/繁忙 | 无 |
509 | 收件人个数超过限制 | 无 |
510 | 邮件过大 | 无 |
511 | 因附件被拒收 | 无 |
512 | 收件人邮箱空间满 | 无 |
999 | 其他 | 无 |
3.3 变量说明
变量渲染,支持常见的特性,例如循环、条件语句,详见下面说明
3.3.1邮件模板中如何添加变量?
变量采用占位符方式,格式为${变量名},例如 尊敬的${uid}
3.3.2 下发时传递的变量params
params为JSON数组的字符串,其中每个JSON OBJECT如下
{
"key": "变量名",
"value": "变量值",
"json": false
}
其中key和value都是严格的字符串类型
若要传递复杂对象,请传递JSON OBJECT的字符串在value,并将json标记置为true
注:json为true时value只能是JSON OBJECT的字符串类型
参考:
[
{
"key": "变量名",
"value": "变量值",
"json": false
},
{
"key": "变量名",
"value": "{\"a\":1}",
"json": true
}
]
3.3.3 下发时传递的变量eachParams
为params的数组
如果收件人大于一个,并且每个收件人对应的变量不一致,则使用此参数
如果每个收件人的变量一致,则使用params参数
数组大小需与收件人列表大小一致
参考:
[
[
{
"key": "变量名",
"value": "变量值",
"json": false
},
{
"key": "变量名",
"value": "变量值",
"json": false
}
],
[
{
"key": "变量名",
"value": "变量值",
"json": false
},
{
"key": "变量名",
"value": "变量值",
"json": false
}
]
]
3.3.4 条件语句
#if($condition)
// 条件成立时执行的代码
#else
// 条件不成立时执行的代码
#end
3.3.5 循环语句
#foreach($item in $test.list)
// 遍历$list中的元素$item,执行的代码
#end
其中的传参例子为:
{
"key": "test",
"value": "{\"list\":[1,2,3]}",
"json": true
}