【问题标题】:Adding attachment with sendgrid npm not working使用 sendgrid npm 添加附件不起作用
【发布时间】:2015-04-12 17:51:29
【问题描述】:

我正在使用 sendgrid Node.js 模块发送电子邮件。我在服务器上已经有一个文件,想将它作为附件添加到电子邮件中。我发现电子邮件正常,但没有附件,所以不知道出了什么问题。

//sendgrid credentials
var mailer = nodemailer.createTransport(sendGrid({ 
  auth: { 
    api_user: conf.mail.user, 
    api_key: conf.mail.pass
  } 
}));

//mail object
var mailObj = {
  to: toAddr, 
  from: fromAddr, 
  subject: subject, 
  html: template,
  files: [{
    path: __dirname + "/../../uploads/" + filename
  }]
};

//send mail
mailer.sendMail(mailObj, function(err, res){ 
  if (err) throw err; 
});   

上面的内容包含在一个更大的函数中,该函数传递了包括filename在内的变量。需要注意的事项:

  • 文件名很好地传递给函数
  • 文件存在于指定位置
  • 当前发送的电子邮件不带附件

【问题讨论】:

  • 您也可以发布您的模板吗?还是它的相关部分?
  • @Zlatko 该模板只是电子邮件正文的一些 HTML。那工作正常。电子邮件连同主题和正文一起发送。当我尝试添加附件时,一切都出错了。

标签: javascript node.js email sendgrid


【解决方案1】:

您是否确认附件确实不在邮件中?如果你“显示原始”(你如何做到这一点取决于你的邮件客户端),并查看它,你可以看到不同的 MIME 部分,并确认附件是否真的不存在,或者它只是一个问题不显示。

如果它存在但未看到,则这是 MIME 顺序问题,可能与名为“将纯文本转换为 HTML”的 SendGrid 帐户设置有关。 邮件客户端自下而上阅读邮件,并期望附件位于底部。如果他们在附件之前显示内容,他们会停止显示内容,并且永远不会“看到”附件。 根据您在将消息传递给 SendGrid 之前的组合方式,他们可能会将 HTML 添加到末尾,从而使附件实际上不可见。您可以通过选中“帐户设置”下的“不转换”选项来关闭该设置。

如果附件确实不存在,您可以检查那些相同的 MIME 部分,看看是否:

  • 附件在那里,但为 0kb,这意味着文件没有被正确读取。
  • 附件 MIME 解析在那里,但仅由文件路径组成,这意味着代码只是从字面上附加路径字符串,而不是读取文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2016-02-26
    相关资源
    最近更新 更多