Sendgrid-nodejs: メールの添付ファイルは0バイトです

作成日 2019年01月18日  ·  3コメント  ·  ソース: sendgrid/sendgrid-nodejs

こんにちは、

@ sendgrid/mail-「^6.3.1」とノード-10.14.1を使用しています。

私の問題は、Excel添付ファイルでデータベースから単一行データを送信すると、添付ファイル付きのメールを受信できますが、添付ファイルとしてExcelでデータベースデータから複数行データを送信すると、0バイトの添付ファイルを受信することです。 ファイルにも画像を埋め込みました。 exceljsモジュールを使用して作成した同じファイルを添付しようとしています。 IIは多くのことを試みましたが、失敗しました..同じExcelファイルを生成できるので-ブラウザでこのコードを使用して-
「」
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
「」
メールを送信するための私のコードは-
sgMail.send({
宛先:config.get( "mail.defaultAdd")、
from:fromMailAdd、
件名:「Excel添付ファイル付きの注文はソフトウェアを介して送信」、
html: <h1>Test Mail</h1>
添付ファイル:[
{{
コンテンツ:fs.readFileSync(excelFile.excelOffFilePath、{encoding: "base64"})、
ファイル名:excelFile.excelOffFile、
タイプ:「application/vnd.ms-excel」
}、
{{
コンテンツ:fs.readFileSync(excelFile.excelFactFilePath、{encoding: "base64"})、
ファイル名:excelFile.excelFactFile、
タイプ:「application/vnd.ms-excel」
}、
{{
コンテンツ:fs.readFileSync(excelFile.excelBrFilePath、{encoding: "base64"})、
ファイル名:excelFile.excelBrFile、
タイプ:「application/vnd.ms-excel」
}、
{{
コンテンツ:fs.readFileSync(excelFile.excelSuFilePath、{encoding: "base64"})、
ファイル名:excelFile.excelSuFile、
タイプ:「application/vnd.ms-excel」
}
]
})

メールのスクリーンショット-
image

同じことを解決する方法を教えてください。

unknown or a waiting for feedback non-library issue

全てのコメント3件

こんにちは@prasoojalan

ファイルへのパスまたはファイルのエンコーディングに問題があるようです。 コード内のexcelFile.*の値を再確認して、ファイルが存在することを確認します。 次に、ファイル自体が正しくbase64エンコードされていることを確認します。 たぶん、このツールは後者を助けることができます。

敬具、

エルマー

こんにちは@エルマー

ファイルを作成して送信するための私の完全なコードは次のとおりです-
添付ファイルのルートパスを1つ指定しようとしましたが、機能しませんでした。 生成された同じExcelファイルがブラウザに正常にダウンロードされます....どのコードが欠落しているか、概念を正しく理解できません...私を助けてくれませんか。

パラメータとして「C」を指定したcreateExcelFile関数では、他の場合とは異なり、ブックを返します。

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

こんにちは@Elmer

あなたの提案に感謝します、それは私が私を大いに困惑させていた私のコードの流れを理解するのを助けました。
私は自分の間違いを見つけて解決しました。 私のコードは、メールが送信されるまでにレコードのないExcelファイルを生成しました。 そこで、関数からメールコードを削除して別の関数を作成し、getExcelFile関数の後に関数を呼び出しました。 このようにして、ファイルが作成され、ファイルが正しく添付されていることを確認しました。

さらに質問をする前に、コードに集中するのを手伝ってくれてありがとう。

敬具、

プラスーンクマールジャラン

このページは役に立ちましたか?
0 / 5 - 0 評価