关于SendCloud模板发信API的一个注意事项

SendCloud是搜狐的一个邮件代发服务,对于很多站长来说还是挺有用的,毕竟有免费套餐,而且发信速度要比纯SMTP要快。

于是康康也申请了账号,开通了API,但是在测试过程中却发现一个问题,就是关于发信API中的“xsmtpapi”这一项参数,文档不是太清晰,导致康康弄了好久。

按照官方文档,“xsmtpapi”是属于SMTP的扩展字段,它的值是经过base64 编码封装过的 JSON 字符串,而这一个参数,就是决定着我们在发送邮件时对邮件模板的替换以及收件人地址的标识!

在官方文档中有三点注意:

  1. SMTP 调用时, X-SMTPAPI 必须是头域字段的最后一个. 否则, 可能导致 xsmtpapi error 的错误.
  2. API 调用时, 直接传入 JSON 字符串即可, 无需 base64 编码封装.
  3. X-SMTPAPI 的总长度不能超过 1M.

官方给出的格式:

{
    "to": ["ben@ifaxin.com", "joe@ifaxin.com"],
    "sub":
    {
        "%name%": ["Ben", "Joe"],
        "%money%":[288, 497]
    }
}

然后康康就开始写了

$param = [
    'apiUser' => $mail['api_user'], // 获取API User
    'apiKey' => $mail['api_key'], // 获取API Key
    'from' => $mail['from'], // 设置发件邮箱
    'templateInvokeName' => $mail['template'], // 设置模板名称
    'xsmtpapi' => json_encode([
        'to' => 'test@test.com',
        'sub' => [ // 设置模板替换
            '%to%' => 'test@test.com', // 设置称呼
            '%sitename%' => $sitename, // 站点名称
            '%siteurl%' => $siteurl // 站点地址
        ]
    ])
];

接着满心欢喜的尝试发送,结果却提示xsmtpapi格式错误,瞬间懵了!难道是因为没base64_encode?可官方说调用API是不用的啊,不管,尝试一次,结果还是错误!

这就搞不懂了,难道还有什么问题?继续排查,将参数var_dump出来看,再结合官方给出的实例看,也没问题啊!都已经json了啊!

接着下载官方给的示例代码来看,还是没发现哪里有问题!真是奇了怪了?

最后再次对比,终于发现了不同,原来xsmtpapi中的数据必须都为数组格式,也就是说,无论是发送单地址还是多地址,最终的JSON数据都必须是数组格式。

且sub项也必须与地址一一对应,就是如果有两个地址,就必须给两个值,三个地址就要有三个值。

好吧,明白了,赶紧把代码改下,变成这样就OK了!

$param = [
    'apiUser' => $mail['api_user'], // 获取API User
    'apiKey' => $mail['api_key'], // 获取API Key
    'from' => $mail['from'], // 设置发件邮箱
    'templateInvokeName' => $mail['template'], // 设置模板名称
    'xsmtpapi' => json_encode([
        'to' => ['test@test.com'],
        'sub' => [ // 设置模板替换
            '%to%' => ['test@test.com'], // 设置称呼
            '%sitename%' => [$sitename], // 站点名称
            '%siteurl%' => [$siteurl] // 站点地址
        ]
    ])
];
最后修改:2019 年 04 月 27 日 11 : 01 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论