2017-07-03 4 views
0

J'ai la fonction suivante pour envoyer des e-mails avec des pièces jointes en utilisant nodemailer, mais parfois Il retourne l'erreur enoent, le chemin du fichier est introuvable même s'il existe. Pouvez-vous me dire où est mon erreur?Impossible d'envoyer des e-mails avec des pièces jointes avec nodemailer

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); 
}); 

}

journal d'erreur:

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

le chemin existe

+0

Pouvez-vous poster l'erreur? –

+0

Erreur: ENOENT: aucun fichier ou répertoire de ce type, ouvrez 'C: \ Users \ Asd \ Documents \ Projets \ asdasd \ asdasd \ 010a3e0f-2f16-4227-a886-873a8529737f \ estimation.pdf', mais le chemin est correct et le fichiers existe :) –

Répondre

1

Comme nœud Js est un seul thread, event driven, cela semble être une question de enchaînant vos fonctions de façon appropriée .

Votre code de création de PDF prend du temps à retourner, mais à ce moment-là, votre code d'envoi est déjà appelé et il trouve que le dossier n'est pas encore créé.

Essayez ceci:

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

Merci beaucoup. Cela fonctionne parfaitement. –