Node.js集成Mailgun在Heroku出现TypeError: Cannot read 'name' of undefined
解决Mailgun在Heroku部署时的form-data 'name' undefined错误
错误原因分析
报错指向form-data库尝试读取value.name但value为undefined,核心问题是邮件附件的data字段(即你代码里的buffer)在Heroku环境中未正确初始化,导致form-data处理附件时出错。本地正常是因为你的本地环境能正确生成buffer,而Heroku上存在资源缺失或路径问题。
解决方案
1. 验证buffer的有效性
在构建邮件数据前,添加调试代码确认buffer在Heroku上是否存在:
console.log('Buffer status:', buffer, buffer?.length); if (!buffer) { throw new Error('Attachment buffer is undefined'); }
如果打印结果显示buffer为undefined,检查:
- 生成buffer的文件是否被包含在Git提交中(比如是否在
.gitignore里误排除了) - 读取文件的路径是否正确(Heroku的文件系统是临时的,确保文件是通过依赖安装或构建脚本生成的)
2. 显式指定附件的content-type
给attachment对象添加contentType字段,避免form-data自动检测类型时出错:
const data = { from: 'donotreply <mailgun@mywebsite.com>', to: 'an@email.com', subject: 'Test Subject', text: `Test Body`, attachment: [{ filename: `a_file.pdf`, data: buffer, contentType: 'application/pdf' // 明确指定MIME类型 }] }
3. 同步依赖包版本
确保本地和Heroku使用完全一致的依赖版本:
- 删除本地的
node_modules和package-lock.json - 重新执行
npm install - 将更新后的
package-lock.json提交到Git,让Heroku安装相同版本的依赖
4. 升级mailgun.js和form-data到最新稳定版
执行以下命令更新依赖:
npm update mailgun.js form-data
更新后提交package.json和package-lock.json,重新部署到Heroku。
内容的提问来源于stack exchange,提问作者WildWombat
相关产品推荐
相关产品推荐

