【问题标题】:how to fix err:Failed to load PDF document once sent by nodemailer attachments?如何修复错误:nodemailer附件发送后无法加载PDF文档?
【发布时间】:2018-05-18 04:33:08
【问题描述】:

我有一个应用程序,它使用 Nodemailer 发送带有附件的电子邮件。首先,我使用 multer 将附件保存在服务器上(运行良好),因此我可以将文件的路径传递给 nodemailer 路由中的附件。邮件和附件发送成功,但附件打开/阅读失败!

这里是 nodemailer 路由:

 app.post("/send",  function(req,res){

var transporter = nodemailer.createTransport({
 service: 'gmail',
 auth: {
        user: 'my gmail',
        pass: 'my pass'
    }
});

var quotename = req.params.id;
console.log(quotename);

var storage = multer.diskStorage({
    destination: function (req,file, callback){
        callback(null, './uploads');
    },

    filename: function (req, file, callback){
        callback(null, "Q" + quotename + ".pdf");
    }
});

var upload = multer ({storage : storage}).single("myFile");


upload(req, res, function(err){
    if(err){
        console.log(err);
    } else {        

        const mailOptions = {
          from: req.body.fr, // sender address
          to: req.body.to, // list of receivers
          bcc: req.body.fr,
          subject: req.body.subject, // Subject line
          html: '<h4>Dear ' + req.body.contname+ '</h4>' + '<p>'+ 
         req.body.message + '</p>' + '<p>Kind Regards</p>' + 
           req.body.user,// html body
          attachments: [  
                {   // filename and content type is derived from path
                  filePath: '/constimator/uploads/Q' + quotename + '.pdf',
                },   
            ], 
        };

        transporter.sendMail(mailOptions, function (err, info) {
           if(err){
             return console.log(err);
           }else{
            console.log(req.body.myFile)
            res.redirect("/submitted"); }
          });
        });
     });

我不知道是因为文件路径/路径问题还是其他原因。我也尝试了路径(而不是 filePath),但同样的问题

【问题讨论】:

  • 您的具体问题是什么?这是相当多的代码,我不确定您在哪里需要帮助。
  • 文件被保存在文件夹中,但我收到“没有这样的文件或目录,打开”路径的错误
  • 您能否提供您获得的确切堆栈跟踪,并显示您的目录结构的屏幕截图以及您所说的文件:the file gets saved in the folder 。我相信这是一个路径问题。

标签: node.js express nodemailer


【解决方案1】:

经过大量的反复试验、谷歌搜索和思考,我自己解决了这个问题。为了以后的参考和有同样问题的人,我将我的答案发布如下:

我已经更改了附件,并且效果很好:

    {   // filename and content type is derived from path
                  filename: "Q" + quotename + ".pdf",
                  contentType: 'application/pdf',
                  path: '/constimator/uploads/Q' + quotename + '.pdf',
                },   
            ],

很简单,通过添加文件名、内容类型和将文件路径更改为路径,problem 就解决了

【讨论】:

    猜你喜欢
    • 2016-03-30
    • 2020-08-05
    • 2022-07-11
    • 2018-10-05
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多