Sendgrid-nodejs: Anhänge in Mails haben 0 Bytes

Erstellt am 18. Jan. 2019  ·  3Kommentare  ·  Quelle: sendgrid/sendgrid-nodejs

Hallo,

Ich verwende @sendgrid/mail - "^6.3.1" & node - 10.14.1.

Mein Problem ist, dass ich, wenn ich einzelne Zeilendaten aus der Datenbank in Excel-Anhang sende, E-Mails mit Anhang empfangen kann, aber wenn ich mehrere Zeilendaten aus Datenbankdaten in Excel als Anhang sende, erhalte ich einen Anhang mit 0 Bytes. Ich habe auch Bilder in die Datei eingebettet. Ich versuche, dieselbe Datei anzuhängen, die über das Exceljs-Modul erstellt wird. Ich habe viel versucht, bin aber gescheitert. Wo ich in der Lage bin, dieselbe Excel-Datei zu generieren - mit diesem Code im Browser -
"
res.setHeader("Inhaltstyp", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
res.setHeader("Content-Disposition", "attachment;filename='" + excelFile.excelOffFile + "'");
workbookFinal.xlsx.write(res).then(() => {
erneut senden(); });S
"
Mein Code zum Senden von E-Mails lautet -
sgMail.send({
zu: config.get("mail.defaultAdd"),
von: fromMailAdd,
Betreff: "Bestellung mit Excel-Anhang per Software senden ",
html: <h1>Test Mail</h1> ,
Anhänge: [
{
Inhalt: fs.readFileSync(excelFile.excelOffFilePath, {Kodierung:"base64"}),
Dateiname: excelFile.excelOffFile,
Typ: "application/vnd.ms-excel"
},
{
Inhalt: fs.readFileSync(excelFile.excelFactFilePath, {Codierung: "base64" }),
Dateiname: excelFile.excelFactFile,
Typ: "application/vnd.ms-excel"
},
{
Inhalt: fs.readFileSync(excelFile.excelBrFilePath, {Codierung: "base64" }),
Dateiname: excelFile.excelBrFile,
Typ: "application/vnd.ms-excel"
},
{
Inhalt: fs.readFileSync(excelFile.excelSuFilePath, { Codierung: "base64" }),
Dateiname: excelFile.excelSuFile,
Typ: "application/vnd.ms-excel"
}
]
})

E-Mail-Screenshot -
image

Bitte helfen Sie mir, wie ich das gleiche lösen kann.

unknown or a waiting for feedback non-library issue

Alle 3 Kommentare

Hallo @prasoojalan ,

Es hört sich so an, als hätten Sie entweder ein Problem mit dem Pfad zur Datei oder der Dateicodierung. Ich würde die Werte von excelFile.* in Ihrem Code doppelt überprüfen, um sicherzustellen, dass die Datei vorhanden ist. Dann würde ich sicherstellen, dass die Datei selbst korrekt base64-codiert ist. Vielleicht kann dieses Tool bei letzterem helfen.

Mit besten Empfehlungen,

Elmer

Hallo @Elmer

Mein vollständiger Code zum Erstellen und Senden von Dateien lautet wie folgt:
Ich habe versucht, einen Root-Pfad für Anhänge anzugeben, aber es hat auch nicht funktioniert. Die gleiche generierte Excel-Datei wird erfolgreich im Browser heruntergeladen ... welcher Code fehlt oder ich kann das Konzept nicht richtig verstehen ... können Sie mir helfen ...

In der createExcelFile-Funktion mit "C" als Parameter gebe ich die Arbeitsmappe zurück, wo dies in anderen Fällen nicht der Fall ist.

exports.getExcelFile = (req, res, next) => {
   const excelFile = {};

   Order.findById(req.params.id).then(order => {
      excelFile.excelOffFile = "Off_" + order.factory + "_" + order._id + ".xls";
      excelFile.excelOffFilePath = path.join("data", "excel", excelFile.excelOffFile);
      excelFile.excelFactFile = "Fact_" + order.factory + "_" + order._id + ".xls";
      excelFile.excelFactFilePath = path.join("data", "excel", excelFile.excelFactFile);
      excelFile.excelBrFile = "Br_" + order.factory + "_" + order._id + ".xls";
      excelFile.excelBrFilePath = path.join("data", "excel", excelFile.excelBrFile);
      excelFile.excelSuFile = "Su_" + order.factory + "_" + order._id + ".xls";
      excelFile.excelSuFilePath = path.join("data", "excel", excelFile.excelSuFile);

      let workbookFinal = createExcelFile(order, "C", excelFile.excelOffFilePath);

      createExcelFile(order, "F", excelFile.excelFactFilePath);
      createExcelFile(order, "B", excelFile.excelBrFilePath);
      createExcelFile(order, "S", excelFile.excelSuFilePath);
sgMail.send({
         to: config.get("mail.defaultAdd"),
         from: defaultMailId,
         subject: "Order with excel attachment send through software ",
         html: `<h1>
         The mail has been sent as trial through program for testing excel file attachement  .
         </h1>
         <h3>
            Office file - ${url.format({ protocol: req.protocol, host: req.get("host"), pathname: "orders/genExcelFile/" + excelFile.excelOffFile })}</br>
            Fact file - ${url.format({ protocol: req.protocol, host: req.get("host"), pathname: "orders/genExcelFile/" + excelFile.excelFactFile })}</br>
            Br file - ${url.format({ protocol: req.protocol, host: req.get("host"), pathname: "orders/genExcelFile/" + excelFile.excelBrFile })}</br>
            Su file - ${url.format({ protocol: req.protocol, host: req.get("host"), pathname: "orders/genExcelFile/" + excelFile.excelSuFile })}</br>
         </h3>
         `,
         attachments: [
            {
               content: fs.readFileSync(path.join(rootDir.rootDir, excelFile.excelOffFilePath), { encoding: "base64" }),
               filename: excelFile.excelOffFile,
            },
            {
               content: fs.readFileSync(excelFile.excelFactFilePath, { encoding: "base64" }),
               filename: excelFile.excelFactFile,
            },
            {
               content: fs.readFileSync(excelFile.excelBrFilePath, { encoding: "base64" }),
               filename: excelFile.excelBrFile,
            },
            {
               content: fs.readFileSync(excelFile.excelSuFilePath, { encoding: "base64" }),
               filename: excelFile.excelSuFile,
            }
         ]
      }).then(result => {
         console.log("mail sent successfully...");
      }).catch(err => console.log(err));

      res.setHeader("Content-Type", "application/vnd.ms-excel");
      res.setHeader("Content-Disposition", "attachment;filename='" + excelFile.excelOffFile + "'");
      workbookFinal.xlsx.write(res).then(() => {
         res.end();
      });

}).catch(err => console.log(err));
};

Hallo @Elmer

Vielen Dank für Ihren Vorschlag, er hat mir geholfen, den Fluss meines Codes zu verstehen, der mich sehr verwirrt hat.
Ich habe meinen Fehler herausgefunden und ihn gelöst. Mein Code generierte eine Excel-Datei ohne Aufzeichnungen, als die E-Mail gesendet wurde. Also habe ich meinen E-Mail-Code aus der Funktion entfernt und eine separate Funktion erstellt und dann die Funktion nach der getExcelFile-Funktion aufgerufen. Auf diese Weise war ich sicher, dass die Dateien erstellt und die Datei korrekt angehängt wurden.

Nochmals vielen Dank, dass Sie mir geholfen haben, mich auf meinen Code zu konzentrieren, bevor Sie weitere Fragen stellen.

Mit besten Empfehlungen,

Prasun Kumar Jalan

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

umarhussain15 picture umarhussain15  ·  3Kommentare

danielflippance picture danielflippance  ·  4Kommentare

kiranshashiny picture kiranshashiny  ·  4Kommentare

thinkingserious picture thinkingserious  ·  4Kommentare

agostonbonomi picture agostonbonomi  ·  3Kommentare