不能发送带附件的电子邮件与节点制器

问题描述:

我有以下函数用于使用nodemailer发送带有附件的电子邮件,但有时会返回错误enoent,即使存在文件路径也无法找到。你能告诉我我的错误在哪里吗?不能发送带附件的电子邮件与节点制器

function sendEmail(userEmail, htmlString, requestSnap, FIREBASE_WEB) { 

fileName ="test.pdf"; 
folderName = "./" + uuid.v4(); 
mkdirp(folderName, function(err) { 
    if (err) console.error(err) 
     else console.log(folderName + ' folder created!') 
    }); 

pdf.create(htmlString + userEmail, options).toFile(folderName + '/' + fileName, function(err, res) { // if the file doesnt exist it will be created 
    if (err) return console.log(err); 
    console.log(res); 
}); 

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

console.log("\nPATH " + folderName + "/" + fileName); 

var mailOptions = { 
    from: '[email protected]', 
    to: userEmail, 
    subject: 'So mail vo pdf-ot', 
    text: 'Hellow', 
    attachments: [{ 
     path: folderName + "/" + fileName 
    }] 
}; 

transporter.sendMail(mailOptions, function(error, info) { 
    if (error) { 
     console.log("ERROR kkkk " + error); 
    } else { 
     console.log('Email sent: ' + info.response); 
     console.log("REQUEST SNAP " + JSON.stringify(requestSnap)); 
    } 

    deleteFolderRecursive(folderName); 
}); 

}

错误日志:

ERROR kkkk Error: ENOENT: no such file or directory, open 'C:\Users\asd\Documents\Projects\asd\asd\010a3e0f-2f16-4227-a886-873a8529737f\asd.pdf' 

存在的路径

+0

你能后的错误? –

+0

错误:ENOENT:没有这样的文件或目录,打开'C:\ Users \ Asd \ Documents \ Projects \ asdasd \ asdasd \ 010a3e0f-2f16-4227-a886-873a8529737f \ estimate.pdf',但路径是正确的,文件存在:) –

为节点的js是单线程的,事件驱动的,这似乎是适当的链接你的函数的问题。

您的PDF创建代码需要一段时间才能返回,但到那时您的发送邮件代码已被调用,并且它发现该文件夹尚未创建。

试试这个:

function sendEmail(userEmail, htmlString, requestSnap, FIREBASE_WEB) { 

fileName = "test.pdf"; 
folderName = "./" + uuid.v4(); 
mkdirp(folderName, function (err) { 
    if (err) console.error(err) 
    else console.log(folderName + ' folder created!') 
}); 

pdf.create(htmlString + userEmail, options).toFile(folderName + '/' + fileName, function (err, res) { // if the file doesnt exist it will be created 
    if (err) return console.log(err); 
    console.log(res); 

    var transporter = nodemailer.createTransport(smtpTransport({ 
     service: 'Gmail', 
     auth: { 
      user: '...', 
      pass: '...' 
     } 
    })); 
    console.log("\nPATH " + folderName + "/" + fileName); 

    var mailOptions = { 
     from: '[email protected]', 
     to: userEmail, 
     subject: 'So mail vo pdf-ot', 
     text: 'Hellow', 
     attachments: [{ 
      path: folderName + "/" + fileName 
     }] 
    }; 

    transporter.sendMail(mailOptions, function (error, info) { 
     if (error) { 
      console.log("ERROR kkkk " + error); 
     } else { 
      console.log('Email sent: ' + info.response); 
      console.log("REQUEST SNAP " + JSON.stringify(requestSnap)); 
     } 

     deleteFolderRecursive(folderName); 
    }); 
}); 
} 
+0

非常感谢。这工作完美。 –