Node.js使用@sendgrid/mail发送base64编码zip邮件附件失败如何解决?
问题根因
SendGrid返回202状态码仅代表平台已接收你的邮件发送请求,不代表最终投递成功。你当前的问题是附件处理环节不符合SendGrid要求,或投递时被收件方邮件服务商拦截。
解决步骤
- 清理base64格式冗余字符
SendGrid要求附件content为无冗余字符的纯base64字符串,转换后可能存在的换行、空格会导致附件解析失败,修改attachment配置如下:
if (plugin) mailOptions.attachments = [{ // 去掉所有空白字符,确保是纯base64 content: plugin.file.buffer.replace(/\s+/g, ''), filename: plugin.file.originalname, type: 'application/zip', disposition: 'attachment' }]
- 校验附件大小
base64编码会让文件体积膨胀33%左右,SendGrid单封邮件总大小限制为30MB,若你的原始zip文件超过22MB,编码后会超出大小限制导致投递失败。可先测试1MB以内的小体积zip验证逻辑是否通顺。 - 修复变量声明隐患
你当前定义mailOptions时没有加const/let声明,会产生全局变量污染,修改为:
const mailOptions = { to: email, from: 'zoomdev.code@gmail.com', subject: subject, text: text }
- 排查投递拦截问题
部分邮件服务商对包含zip附件的邮件拦截规则较严,若你的zip包内包含.exe/.bat等可执行文件,大概率会被直接拒收。可先测试仅包含普通文本的zip包验证投递逻辑,也可登录SendGrid后台的活动页,查询对应邮件的投递失败具体原因。
内容的提问来源于stack exchange,提问作者YTGS
相关产品推荐
相关产品推荐

