Node.js中从SendGrid入站Webhook响应分离邮件附件的方法
从SendGrid入站Webhook分离附件的方法
一、SendGrid官方结构化解析方案
SendGrid的入站Webhook支持直接返回结构化的附件数据,不用手动处理原始MIME字符串。操作步骤如下:
- 在SendGrid控制台的「Inbound Parse Settings」中,开启解析配置时勾选「Attachments」选项(部分版本显示为「Include Attachments」)。
- 开启后,Webhook接收的负载会新增
attachments数组,每个元素包含完整的附件信息,自动适配任意数量的附件:filename:附件文件名content:Base64编码的附件内容type:附件MIME类型disposition:附件处置方式(如attachment)content_id:对应邮件中的X-Attachment-Id/Content-ID
示例结构化负载:
body = { dkim: '{@gmail.com : pass}', subject: 'Subject 1', // 其他原有字段... attachments: [ { filename: "dummy copy.pdf", content: "JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp...", type: "application/pdf", disposition: "attachment", content_id: "f_l8buktdz0" } ] }
这种方式无需自行编写字符串截取逻辑,可靠性和效率更高。
二、原始MIME内容的通用解析方案
如果无法开启SendGrid的结构化解析,可以借助MIME解析库处理原始email字段,避免手动截取的边界错误:
- Node.js可使用
mailparser库,Python可使用标准库email,它们能自动解析多部分MIME邮件,分离所有附件。 - Node.js示例代码:
const simpleParser = require('mailparser').simpleParser; async function extractAttachments(rawEmail) { const parsed = await simpleParser(rawEmail); return parsed.attachments.map(att => ({ filename: att.filename, content: att.content.toString('base64'), type: att.contentType })); } // 调用示例 const attachments = await extractAttachments(body.email);
内容的提问来源于stack exchange,提问作者Aniruddhsingh Rathore
相关产品推荐
相关产品推荐

