Sendgrid-nodejs: la pièce jointe dans les mails a 0 octet

Créé le 18 janv. 2019  ·  3Commentaires  ·  Source: sendgrid/sendgrid-nodejs

Bonjour,

J'utilise @sendgrid/mail - "^6.3.1" & node - 10.14.1.

Mon problème est que lorsque j'envoie des données sur une seule ligne à partir d'une base de données dans une pièce jointe Excel, je peux recevoir un courrier avec pièce jointe, mais lorsque j'envoie des données sur plusieurs lignes à partir de données de base de données dans Excel en pièce jointe, je reçois une pièce jointe avec 0 octet. J'ai également intégré des images dans le fichier. J'essaie de joindre le même fichier créé via le module exceljs. J'ai beaucoup essayé mais j'ai échoué .. alors que je suis capable de générer le même fichier Excel - avec ce code dans le navigateur -
"
res.setHeader("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
res.setHeader("Content-Disposition", "attachment;filename='" + excelFile.excelOffFile + "'");
workbookFinal.xlsx.write(res).then(() => {
res.end(); });s
"
Mon code pour envoyer du courrier est -
sgMail.send({
à : config.get("mail.defaultAdd"),
de : fromMailAdd,
objet : "Commande avec pièce jointe Excel envoyée via le logiciel",
html : <h1>Test Mail</h1> ,
pièces jointes : [
{
contenu : fs.readFileSync(excelFile.excelOffFilePath, {encoding:"base64"}),
nom de fichier : excelFile.excelOffFile,
tapez : "application/vnd.ms-excel"
},
{
contenu : fs.readFileSync(excelFile.excelFactFilePath, { encodage : "base64" }),
nom de fichier : excelFile.excelFactFile,
tapez : "application/vnd.ms-excel"
},
{
contenu : fs.readFileSync(excelFile.excelBrFilePath, { encodage : "base64" }),
nom de fichier : excelFile.excelBrFile,
tapez : "application/vnd.ms-excel"
},
{
contenu : fs.readFileSync(excelFile.excelSuFilePath, { encodage : "base64" }),
nom de fichier : excelFile.excelSuFile,
tapez : "application/vnd.ms-excel"
}
]
})

capture d'écran du courrier -
image

S'il vous plaît aidez-moi à résoudre le même problème.

unknown or a waiting for feedback non-library issue

Tous les 3 commentaires

Bonjour @prasoojalan ,

Il semble que vous ayez un problème avec le chemin d'accès au fichier ou l'encodage du fichier. Je vérifierais les valeurs de excelFile.* dans votre code pour m'assurer que le fichier existe. Ensuite, je m'assurerais que le fichier lui-même est correctement encodé en base64. Peut-être que cet outil peut aider avec ce dernier.

Meilleures salutations,

Elmer

Bonjour @Elmer

Mon code complet pour créer et envoyer un fichier est comme -
J'ai essayé de donner un chemin racine de pièce jointe, mais cela n'a pas fonctionné non plus. Le même fichier Excel généré est téléchargé avec succès dans le navigateur ... quel code me manque-t-il ou je ne parviens pas à comprendre correctement le concept ... pouvez-vous m'aider ..

Dans la fonction createExcelFile avec "C" comme paramètre, je renvoie le classeur là où pas dans d'autres cas.

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

Bonjour @Elmer

Merci pour votre suggestion, cela m'a aidé à comprendre le flux de mon code qui me déconcertait beaucoup.
J'ai compris mon erreur et l'ai résolue. Mon code a généré un fichier Excel sans enregistrement au moment où le courrier a été envoyé. Donc, j'ai supprimé mon code de messagerie de la fonction et créé une fonction distincte, puis appelé la fonction après la fonction getExcelFile. De cette façon, j'étais sûr que les fichiers avaient été créés et que le fichier était correctement joint.

Encore une fois, merci beaucoup de m'avoir aidé à me concentrer sur mon code avant de poser d'autres questions.

Meilleures salutations,

Prason Kumar Jalan

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

polkhovsky picture polkhovsky  ·  3Commentaires

zvone187 picture zvone187  ·  4Commentaires

thinkingserious picture thinkingserious  ·  4Commentaires

Chrischuck picture Chrischuck  ·  3Commentaires

amlcodes picture amlcodes  ·  4Commentaires