发送远程URL加载的PDF附件失败,附件损坏呈空白页
问题原因及解决方案
核心问题
你用pdfData.text()读取二进制文件内容的方式完全错误——PDF、图片这类二进制数据不能当作字符串解析,text()会把原始字节按UTF-8编码转成文本,直接破坏了文件的二进制结构,导致附件变成空白或损坏状态。
修正后的代码
const pdfData = await fetch(url); // 读取原始二进制数据,而非文本 const arrayBuffer = await pdfData.arrayBuffer(); // 将二进制数据转为base64编码字符串 const base64Content = Buffer.from(arrayBuffer).toString('base64'); await SendEmail({ from: 'help@example.com', to: email, html: '<html>text attachment</html>', subject: 'Attachment test', attachments: [{ content: base64Content, filename: 'program.pdf', type: 'application/pdf', encoding: 'base64' // 明确指定编码,多数邮件库需要这个参数识别内容 }] })
关键说明
- 所有二进制类型文件(PDF、图片、压缩包等),都必须用
arrayBuffer()获取原始字节数据,避免字符串解析带来的编码损坏 - 部分邮件发送库需要明确标注
encoding: 'base64'才能正确解码附件内容,建议加上这个参数保证兼容性 - 这套逻辑适用于所有非文本类附件,无需针对不同文件类型修改核心读取逻辑
内容的提问来源于stack exchange,提问作者meds
相关产品推荐
相关产品推荐

