PDF Attachment NodeMailer

Merci d’avance pour vos réponses. J’ai écrit du code qui utilise nodemailer 0.7.1.Il envoie l’e-mail et joint un pdf à l’e-mail. Cependant, la pièce jointe .pdf se corrompt elle-même lors du codage ou la tronque ou quelque chose. La raison pour laquelle je dis que c’est le fichier avant la pièce jointe (c’est-à-dire celui que j’ai localement) est de 512 Ko et la pièce jointe dans le courrier électronique est de 1 Ko seulement.

C’est le code qui utilise nodemailer:

var nodemailer = require("nodemailer"); var util = require("./util"); var env = require('./environment'); var smtpTransport = nodemailer.createTransport("SMTP",{ service: env.service, auth: { user: env.user, pass: env.password } }); exports.sendAttachment = function(info, callback, debug) { util.validatInput(info, ["body"] , function(err, info){ if(err){ util.errPrint(err, "serverUtil/nodemailer.sendAttachment", 1, function(message){callback(err);}); }else { var mailOptions={ from : "[email protected]", to : "[email protected]", subject : "Application from " + info.userEmail, text : info.body, attachments: [ { fileName: 'file.pdf', //This needs to be the link to the form, or the actual form filePath: 'file.pdf', contentType: "application/pdf" } ] } smtpTransport.sendMail(mailOptions, function(error, response){ if(error){ console.log(error); callback(err); } else{ console.log("Message sent: " + response.message); callback({msg: "form sent"}); } }); } }) } 

J’utilise Google Chrome comme navigateur, mais j’ai essayé avec d’autres navigateurs en vain. De toute évidence, les navigateurs ne devraient rien avoir à faire avec cela, car les données du fichier PDF lui-même sont la question ici.

J’ai mis le fichier dans le même répertoire pour éviter les problèmes et j’ai même fait ‘./’ avant le fichier pour le répertoire actuel. J’ai aussi changé ‘chemin du fichier’ en ‘chemin’ et ensuite, il n’a envoyé aucune pièce jointe.

Je pense que le problème est dans le tableau ‘attachments’. Peut-être que les champs ne sont pas corrects ou que je dois append quelques informations supplémentaires.

Si quelqu’un peut me dire si j’ai besoin de diffuser quelque chose plutôt que ce que je fais et si oui, comment diffuser le fichier, ce serait génial!

 var api_key = 'key-6b6987887a1aa9489958a5f280645f8b'; var domain = 'sandboxcd1a6d15d41541f38519af3f5ee93190.mailgun.org'; var mailgun = require('mailgun-js')({apiKey: api_key,domain:domain}); var path = require("path"); var filepath = path.join(__dirname, 'wacc.pdf'); var data = { from: '[email protected]', to: '[email protected]', subject: 'Today Test', text: 'Sending Test', attachment: filepath }; mailgun.messages().send(data, function (error, body) { console.log(body); }); 

Il s’est avéré que je devais me débarrasser des atsortingbuts filePath et contentType et placer streamSource à la place. J’avais aussi besoin d’utiliser fs.createReadStream. Voici le code si vous êtes intéressé.

 var nodemailer = require("nodemailer"); var util = require("./util"); var env = require('./environment'); var fs = require('fs'); var path = require('path'); var smtpTransport = nodemailer.createTransport("SMTP", { service: env.service, auth: { user: env.user, pass: env.password } }); exports.sendAttachment = function(info, callback, debug) { util.validatInput(info, ["body"], function(err, info) { if (err) { util.errPrint(err, "serverUtil/nodemailer.sendAttachment", 1, function(message) { callback(err); }); } else { var filePath = path.join(__dirname, 'file.pdf'); var mailOptions = { from: "[email protected]", to: "[email protected]", subject: "Application from " + info.userEmail, text: info.body, attachments: [{ fileName: 'file.pdf', //This needs to be the link to the form, or the actual form // filePath: './file.pdf', streamSource: fs.createReadStream(filePath) // , contentType: "application/pdf" }] } smtpTransport.sendMail(mailOptions, function(error, response) { if (error) { console.log(error); callback(err); } else { console.log("Message sent: " + response.message); callback({ msg: "form sent" }); } }); } }) }