You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中Nodemailer发送ByteArray图片附件失败问题排查

问题原因及解决方案

你的问题出在API端点对base64字符串的解码方式错误,导致附件内容损坏,无法正常打开。

具体错误点

客户端代码中,你已将图片数据转换为base64字符串并通过JSON发送到API:

const base64Image = byteArray.toString('base64')
// 将base64字符串放入payload发送

但API端点代码里,你直接用默认的utf8编码将base64字符串转成Buffer:

const byteArray = Buffer.from(request.body.image) // 错误:默认编码不匹配base64格式

这种转换会把base64字符串当作普通文本解析,生成的Buffer并非原始图片的二进制数据,最终导致附件损坏无法打开。

修复方案

修改API端点的Buffer转换代码,明确指定用base64编码解析字符串:

// 正确写法:指定base64编码解码字符串
const byteArray = Buffer.from(request.body.image, 'base64')

为什么第二种方式可行?

第二种可行的代码中,你是直接在服务器端读取本地图片文件,fs.readFile返回的data本身就是正确的二进制Buffer,不需要经过base64编码传输再解码的过程,自然不会出现编码错误,因此附件能正常打开。

额外优化建议

  • 客户端代码里,Buffer.from(data)是多余的,fs.readFile读取的data已经是Buffer类型,直接转base64即可:
    // 简化写法
    const base64Image = data.toString('base64')
    
  • 确认API端的body解析中间件(如body-parser.json())不会修改base64字符串内容,目前你的配置不会有这个问题。

内容的提问来源于stack exchange,提问作者Renee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:09:57