如何自定义SendGrid邮件默认退订链接的显示位置与样式?
SendGrid自定义退订链接位置解决方案
针对你遇到的两个核心问题:使用动态模板丢失原有邮件内容、不使用模板退订链接被自动追加到正文末尾,可通过以下两种方案实现需求:
方案1:修改现有动态模板(推荐,可灵活控制样式)
你设置模板后只显示订阅模块,是因为模板内没有预留主题、正文的变量占位位,按以下步骤调整即可:
- 进入SendGrid后台的动态模板管理页,找到你当前使用的模板
d-848281f0ab8f45a7bc0e1690442a8803做修改:- 主题栏设置为动态变量
{{subject}},支持接收代码传入的自定义主题 - 正文区域添加内容占位变量,如果你传入的是HTML格式正文,使用三个大括号避免标签转义:
{{{email_content}}} - 在你期望展示退订链接的位置(比如正文下方)新增独立区块,可自行设置灰色背景、分割线等样式和正文做区分,区块内插入SendGrid内置的退订变量:
- 退订当前组:
{{asm_group_unsubscribe_url}} - 管理订阅偏好:
{{asm_preferences_url}} - 全局退订:
{{asm_global_unsubscribe_url}}
- 退订当前组:
- 主题栏设置为动态变量
- 修改你的Java代码,将原有主题、正文内容作为动态参数传入模板:
ASM asmInst = new ASM(); asmInst.setGroupId(mailGroupId); mail.setASM(asmInst); int[] groupsToDisplay = {mailGroupId}; asmInst.setGroupsToDisplay(groupsToDisplay); mail.setTemplateId("d-848281f0ab8f45a7bc0e1690442a8803"); // 新增:将原有主题、正文传入动态模板参数 Personalization personalization = mail.getPersonalizations().get(0); // 传入主题,对应模板内的{{subject}}变量 personalization.addDynamicTemplateData("subject", mail.getSubject()); // 传入HTML正文,对应模板内的{{{email_content}}}变量 personalization.addDynamicTemplateData("email_content", mail.getContent().get(0).getValue());
方案2:不使用动态模板,手动插入退订链接
如果你不想调整模板,可直接关闭自动追加退订链接的开关,自行控制链接位置:
- 进入SendGrid后台「设置」-「订阅管理」,关闭「自动在所有邮件末尾添加退订链接」的开关
- 在你自己拼接邮件正文时,在期望的位置插入退订链接段,示例HTML如下:
<hr style="border:none;border-top:1px solid #eee;margin:20px 0;"> <div style="background:#f5f5f5;padding:16px;font-size:12px;color:#666;"> <a href="<%asm_group_unsubscribe_url%>">退订此列表</a> | <a href="<%asm_preferences_url%>">管理邮件偏好</a> </div>
- Java代码无需设置
templateId,保留原有ASM配置即可,SendGrid会自动将代码里的<%xxx%>标签替换为对应的实际退订链接,也不会再自动在正文末尾追加链接。
内容的提问来源于stack exchange,提问作者Satishkumar sahu
相关产品推荐
相关产品推荐

