【实践】mandrillapp(mailchimp)模板邮件发送

【实践】mandrillapp模板邮件发送功能

前置情景:

        1. 已有mailchimp账号,没有请自行申请,免费版本即可完成功能开发测试       

        2. 具备一定的英文文档阅读能力

        3. 相关地址:

                mailchimp: Login | Mailchimp

                mandrillapp: Log in to Mandrill

                Transactional API(含Guides、Documentation自行阅读):

                ​​​​​​​Mailchimp Transactional API Reference | Mailchimp Developer

实践背景:

        现海外服务中存在两种发送邮件方式:

        1. 使用公司内部邮件依赖包       

        2. 使用第三方平台mandrillapp

        现需要改造海外服务,统一使用mailchimp方式发送邮件,不再使用公司内部的邮件依赖包

实践过程

        1. 创建mandrillapp的API-KEY(注意不是mailchimp的API-KEY

mandrillapp入口:Log in to Mandrill

Settings -> SMTP & API Info -> API Keys -> New API Key

mailchimp入口:Login | Mailchimp

左下角头像 -> Account & billing -> Extras -> API keys -> Your API keys -> Create A Mandrill API Key 然后就会跳转到mandrillapp那边去了

         2. 创建邮件模板

 mandrillapp入口:建议使用

Outbound -> Templates -> Create a Template

说明:

        1. Template Info中slug为创建第一步输入的模板名称全小写字符串,后续可使用name/slug在代码中标识使用的模板

        2. Template Defaults请务必填写完善,否则后续接口测试可能出现 rejected & invalid-sender 的响应。From Address为邮箱格式,有强校验

        3. 记得制作完成模板后点击右上 Save Draft、Publish

 mailchimp入口:

首页 -> Campaigns -> Email templates -> Create template

说明:

        1. 创建时可以视情况选择对应的格式模板,一般邮件simple足够了 

        2. 创建成功后记得推送到 mandrillapp,推送后就可以在Templates中看到了

        3. 之所以推荐使用 mandrillapp 直接创建,就是因为通过 mailchimp 创建的模板不会有让你输入默认三项的步骤,推送到 mandrillapp 后如不进行二次编辑,很可能忽略默认三项,这将会造成后续测试接口时的 rejected、invalid-sender响应,调用接口成功但没有发出去邮件的现象。

        4. 模板有内容需要替换时使用 *|xxx|* 进行标识,并在接口入参message中使用global_merge_vars指定替换的内容,mandrillapp详见api文档

       3. 接口测试

API文档:Send using message template | Mailchimp Transactional API Reference | Mailchimp Developer

  说明:

        1. 此接口需要4个必填请求体参数:

                key:mandrillapp 的 API-KEY 

                template_name:创建的模板name/slug,建议使用slug

                template_content:用于动态替换邮件内容的参数,需要在模板中通过 mc:edit="xxx" 配置,此处不详细展开,详见文档 Documentation -> Templates and Dynamic Content -> Editable content areas

                message: 配置具体的邮件基础信息,一般常用 to(接收方)、global_merge_vars/merge_vars(模板内容替换)、from_email(发送方)等等,可选很多,请自行阅读文档,此处不做展开(当然也可以一个都不配置,接口会调用成功,但邮件不会发送(发了但没完全发)

        2. 需要动态替换邮件内容时,视情况选取使用 template_content / global_merge_vars / merge_vars方式,详见 Documentation -> Templates and Dynamic Content, 三种方式在模板中占位标识不同,需注意

        3. 正常情况如图三所示,若出现 "status": "rejected" & "reject_reason": "invalid-sender" 情况,请自行检查模板是否配置默认三项,若已配置请检查发送方、接收方邮箱地址是否正确等其他配置。

       4. 后端代码编写 (以Java为例):

采用HttpClients方式实现mailchimp接口调用:


    /**
     * 通过mailchimp发送邮件
     *
     * @author kennys.shang
     * @param mapParam              参数map
     * @param secretKey             秘钥
     * @param template              邮件模板
     * @param templateContent       模板内容
     * @param sendToReqList         接收方集合
     * @param globalMergeVars       局部替换内容
     * @return SendEmailRes         邮件发送响应对象
     */
    private List<SendEmailRes> sendEmailByMailchimp(Map<String, Object> mapParam, String secretKey, String template,
                                                    List<SendEmailTemplateContentReq> templateContent,
                                                    List<SendToReq> sendToReqList,
                                                    List<SendEmailGlobalVarReq> globalMergeVars) {
        // 组装参数map
        mapParam.put("key", secretKey);
        mapParam.put("template_name", template);
        mapParam.put("template_content", templateContent);
        Map<String, Object> messageParam = Maps.newHashMap();
        messageParam.put("to", sendToReqList);
        messageParam.put("global_merge_vars", globalMergeVars);
        mapParam.put("message", messageParam);

        // http方式发送邮件
        HttpHelper.RequestParameter<List<SendEmailRes>> parameter = HttpHelper.RequestParameter.<List<SendEmailRes>>builder()
                .url(emailProperties.getAccountUrl())
                .parameter(mapParam)
                .typeReference(new TypeReference<List<SendEmailRes>>() {})
                .build();
        return httpHelper.post(parameter);
    }

说明:

        1. 此处只作核心代码展示,秘钥、模板等读取自配置文件,模板内容、接收方、局部替换内容视所需自行组装,其实本质还是对应第3步接口测试的请求体参数

        2. HttpHelper为经公司封装的公共HttpClients,自行替换为原生HttpClients方式即可

总结

        其实需求丢过来时还是一头雾水,但静心分析后将其拆分为多个步骤就会发现并不困难,前后加起来大概花费了1天时间,主要还是现在摆渡上 mailchimp 相关文献太少了,技术探索、阅读官方文档以及那个 invalid-sender 踩坑浪费了不少时间。

        愿这篇实践能对后来者有所帮助

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值