如何通过API为Mailgun邮件添加自定义头?Deno服务器头丢失求助
解决Deno中Mailgun自定义请求头不生效的问题
以下是针对问题的排查和解决方案:
调整自定义头的传递格式
多数Deno环境下的Mailgun SDK不支持直接用h:前缀作为键名传递自定义头,需将所有自定义头放在headers对象中。修改代码如下:await mailgun.send({ to: mailgunData.email, from: mailgunData.from, subject: mailgunData.subject, template: ReminderEmailTemplate.Projects, "v:projectsLink": `${getBaseUrl()}/projects`, "v:projectStartLink": `${getBaseUrl()}/project-start`, "v:jobsLink": `${getBaseUrl()}/jobs`, "v:fullName": mailgunData.full_name, headers: { "List-Unsubscribe": "<http://lists.domain.tld/newsletter>, <mailto:newsletter-request@domain.tld?subject=unsubscribe>", "List-Unsubscribe-Post": "List-Unsubscribe=One-Click", "Precedence": "bulk", "Priority": "normal", "X-Mailgun-Tag": "newsletter", "Feedback-ID": "1234:newsletter:mailgun", "X-Mailgun-Dkim": "yes", "something": "something", "Reply-To": "something@something.com" } })验证SDK版本与文档匹配
确认你使用的Mailgun Deno库为最新版本,查看其官方文档中关于自定义头传递的具体要求。部分旧版本SDK可能对参数格式有特殊限制。直接调用Mailgun API测试
如果SDK仍有问题,尝试绕过SDK直接用fetch调用Mailgun发送API,验证自定义头是否能正常传递:const apiKey = "你的Mailgun API密钥"; const domain = "你的域名"; await fetch(`https://api.mailgun.net/v3/${domain}/messages`, { method: "POST", headers: { "Authorization": `Basic ${btoa(`api:${apiKey}`)}`, "Content-Type": "application/x-www-form-urlencoded" }, body: new URLSearchParams({ to: mailgunData.email, from: mailgunData.from, subject: mailgunData.subject, template: ReminderEmailTemplate.Projects, "v:projectsLink": `${getBaseUrl()}/projects`, "v:projectStartLink": `${getBaseUrl()}/project-start`, "v:jobsLink": `${getBaseUrl()}/jobs`, "v:fullName": mailgunData.full_name, "h:List-Unsubscribe": "<http://lists.domain.tld/newsletter>, <mailto:newsletter-request@domain.tld?subject=unsubscribe>", "h:List-Unsubscribe-Post": "List-Unsubscribe=One-Click", "h:Precedence": "bulk", // 其他自定义头... }) });若此方法生效,说明问题出在SDK的参数解析上,可考虑升级SDK或提交issue反馈。
检查Mailgun日志详情
确认你查看的是Mailgun控制台中邮件的完整头信息,而非摘要视图。部分默认日志视图会隐藏部分自定义头,需进入单条邮件的详情页面查看。
内容的提问来源于stack exchange,提问作者Coelacanth
相关产品推荐
相关产品推荐

