2016-05-14 3 views
3

Vielen Dank im Voraus für Ihre Antworten. Ich habe einen Code geschrieben, der nodemailer 0.7.1 verwendet. Er sendet die E-Mail und fügt der E-Mail ein PDF-Dokument hinzu. Der .pdf-Anhang korrumpiert sich jedoch beim Codieren oder Abschneiden oder so etwas. Der Grund, warum ich das sage, ist die Datei vor dem Anhängen (d. H. Die, die ich lokal habe) ist 512kb und der Anhang in der E-Mail ist nur 1kb.PDF Anhang NodeMailer

Dies ist der Code, der nodemailer verwendet:

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

Ich bin mit Google Chrome als Browser aber haben versucht, mit anderen Browsern ohne Erfolg

. Offensichtlich sollten Browser nichts damit zu tun haben, da die Daten des PDFs selbst das Problem sind.

Ich legte die Datei in das gleiche Verzeichnis, um Probleme zu vermeiden und sogar './' vor der Datei für das aktuelle Verzeichnis. Ich habe auch "Dateipfad" in "Pfad" geändert und dann keine Anhänge gesendet.

Ich denke, das Problem liegt im Array "Anhänge". Vielleicht sind die Felder nicht richtig oder ich muss noch weitere Informationen hinzufügen.

Wenn mir jemand sagen kann, ob ich streamen muss oder etwas, anstatt was ich tue und wenn ja, wie die Datei zu streamen, das wäre toll!

Antwort

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

Es stellte sich heraus, dass ich die Attribute filePath und contentType loswerden und stattdessen streamSource setzen musste. Ich brauchte auch fs.createReadStream. Hier ist der Code, wenn Sie interessiert sind.

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