如何使用SendGrid发送重复/多份附件?重复Base64附件仅收到一份的原因排查
解决SendGrid发送重复附件仅显示一份的问题
这个问题我之前也碰到过!核心原因是SendGrid会根据附件的filename字段自动去重——如果两个附件的文件名完全相同,哪怕Base64内容是重复的,SendGrid也只会保留其中一份。
你当前的attachments数组里,两个附件应该是默认使用了相同的文件名(比如从URL解析来的programming-languages.png),所以被SendGrid合并成一个了。
解决方案:给每个重复附件设置不同的文件名
只需要在构造attachments数组时,给每个元素手动指定不同的filename即可,哪怕文件内容完全一致,只要文件名不一样,就能作为独立附件显示。
修改你的代码示例如下:
// 假设你已经把两个URL转成了Base64字符串,分别存为base64Str1和base64Str2 const attachments = [ { content: base64Str1, filename: "programming-languages-1.png", // 不同的文件名 type: "image/png", disposition: "attachment" }, { content: base64Str2, filename: "programming-languages-2.png", // 不同的文件名 type: "image/png", disposition: "attachment" } ]; // 然后正常调用SendGrid发送 const sendGridRaw: [ClientResponse, unknown] = await sendGrid.send({ to: email, from: infoFrom, subject, html: msg, attachments });
为什么会这样?
SendGrid的这个设计是为了避免用户误发重复附件,但如果你的业务场景确实需要发送多份相同文件(比如给用户发送同一文档的多个副本),就必须通过区分文件名来绕过这个去重机制。
亲测这个方法有效,修改后你就能收到两份独立的附件了!
内容的提问来源于stack exchange,提问作者Ericson Willians
相关产品推荐
相关产品推荐

