使用SendGrid Node.js库按单封邮件禁用点击追踪失效问题求助
问题:sendgrid-nodejs单封邮件禁用点击追踪配置无效
我正在使用sendgrid-nodejs库发送邮件,希望通过代码全局禁用单封邮件的点击追踪。我知道可以在动态模板的链接中添加clicktracking=off属性(如<a clicktracking=off href="http://example.com">link text</a>)来禁用单链接追踪,但想通过代码统一控制整封邮件。
根据SendGrid文档,曾有通过clicktrack过滤器配置的方式:
{ "filters": { "clicktrack": { "settings": { "enable": 0, "enable_text": false } } } }
查看Mail构造函数类型定义,headers要求值为字符串,直接传对象会报错:
{ "body": { "errors": [ { "message": "Invalid type. Expected: string, given: object.", "field": "headers", "help": "http://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/errors.html#message.headers" } ] } }
改成字符串后邮件发送成功,但点击追踪并未禁用,我的代码如下:
const { SENDGRID_KEY } = process.env const mail = require('@sendgrid/mail') mail.setApiKey(SENDGRID_KEY) mail.send({ headers: { // 无效果 "X-SMTPAPI": JSON.stringify({ filters: { clicktrack: { settings: { enable: 0, enable_text: false } } } }), // 无效果 "filters": JSON.stringify({ clicktrack: { settings: { enable: 0, enable_text: false } } }), }, to: 'somebody@email.com', from: 'nobody@email.com', templateId: 'd-xxxxxxxxxxxxxxxxxxxxxxxx', dynamic_template_data: { subject: 'Hello World' } })
请问为什么配置不起作用?
解答
原因:旧版API配置不适用于v3 Mail API
你使用的filters配置以及X-SMTPAPI头的方式是SendGrid v2 API的用法,而当前sendgrid-nodejs库对接的是v3 Mail API,v3已经不再支持这种配置方式,所以你的设置不会生效。
正确实现:使用v3原生的tracking_settings参数
v3 API提供了专门的tracking_settings字段来控制邮件追踪功能,直接在邮件配置中添加该字段即可,不需要放到headers里。
修改后的代码:
const { SENDGRID_KEY } = process.env const mail = require('@sendgrid/mail') mail.setApiKey(SENDGRID_KEY) mail.send({ to: 'somebody@email.com', from: 'nobody@email.com', templateId: 'd-xxxxxxxxxxxxxxxxxxxxxxxx', dynamic_template_data: { subject: 'Hello World' }, // 全局禁用点击追踪 tracking_settings: { click_tracking: { enable: false, // 禁用HTML内容的点击追踪 enable_text: false // 禁用纯文本内容的点击追踪 } } })
补充说明
- 该配置会禁用整封邮件所有链接的点击追踪;
- 如果需要保留部分链接的追踪,仍可在对应链接上添加
clicktracking=off属性单独控制。
内容的提问来源于stack exchange,提问作者Crayons
相关产品推荐
相关产品推荐

