2015-04-12 17 views
2

我正在使用sendgrid Node.js模塊發送電子郵件。我有一個文件已經在服務器上,並希望將其添加爲電子郵件的附件。我發現電子郵件過得很好,但沒有附件,所以不確定發生了什麼問題。使用sendgrid添加附件npm不工作

//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。事情要牢記:

  • 文件名被傳遞給函數精細
  • 該文件存在在指定的位置
  • 電子郵件當前發送沒有附件
+0

你還可以發佈你的模板?或者它的相關部分? – Zlatko

+0

@Zlatko模板只是電子郵件正文的一些HTML。這工作正常。電子郵件與主題和正文一起發送。只要我嘗試添加附件就會發生錯誤。 – Coop

回答

0

你有沒有驗證附件真的不在消息中?如果你「顯示原始的」(你如何做到這一點取決於你的郵件客戶端),並通過它看,你可以看到不同的MIME部分,並確認附件是否真的不存在,或者它只是一個問題沒有被顯示。

如果它存在但沒有看到,這是一個MIME命令的問題,並且可能與SendGrid帳戶設置有關,稱爲「將純文本轉換爲HTML」。 郵件客戶端從下往上閱讀郵件,並期望附件位於底部。如果他們在附件之前顯示內容,他們將停止顯示內容,並且永遠不會「看到」附件。 根據消息在傳遞給SendGrid之前的組裝方式,它們可能會將HTML添加到最後,從而使附件無法看到。您可以通過選中您的賬戶設置下的「不轉換」選項來關閉該設置。

如果附件確實是不存在的,你可以檢查那些相同的MIME部分,看是否:

  • 附件是存在的,但是是0KB,這意味着該文件沒有被正確讀取。
  • 附件MIME解析存在,但僅由文件路徑組成,這意味着代碼只是從字面上附加路徑字符串,而不是讀取文件。