Sendgrid-nodejs: anexo em e-mails tem 0 bytes

Criado em 18 jan. 2019  ·  3Comentários  ·  Fonte: sendgrid/sendgrid-nodejs

Olá,

Estou usando @sendgrid/mail - "^6.3.1" & node - 10.14.1.

Meu problema é que, quando envio dados de linha única do banco de dados no anexo do Excel, consigo receber e-mails com anexo, mas quando envio vários dados de linha dos dados do banco de dados no Excel como anexo, recebo anexo com 0 bytes. Eu incorporei imagens também no arquivo. Estou tentando anexar o mesmo arquivo criando através do módulo exceljs. Eu tentei muito, mas falhei .. onde como eu sou capaz de gerar o mesmo arquivo excel- com este código no navegador-
"
res.setHeader("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
res.setHeader("Content-Disposition", "attachment;filename='" + excelFile.excelOffFile + "'");
workbookFinal.xlsx.write(res).then(() => {
reenviar(); });s
"
Meu código para enviar e-mail é -
sgMail.send({
para: config.get("mail.defaultAdd"),
de: fromMailAdd,
assunto: "Encomenda com anexo excel enviado por software",
html: <h1>Test Mail</h1> ,
anexos: [
{
conteúdo: fs.readFileSync(excelFile.excelOffFilePath, {encoding:"base64"}),
nome do arquivo: excelFile.excelOffFile,
digite: "aplicativo/vnd.ms-excel"
},
{
conteúdo: fs.readFileSync(excelFile.excelFactFilePath, { encoding: "base64" }),
nome do arquivo: excelFile.excelFactFile,
digite: "aplicativo/vnd.ms-excel"
},
{
conteúdo: fs.readFileSync(excelFile.excelBrFilePath, { encoding: "base64" }),
nome do arquivo: excelFile.excelBrFile,
digite: "aplicativo/vnd.ms-excel"
},
{
conteúdo: fs.readFileSync(excelFile.excelSuFilePath, { encoding: "base64" }),
nome do arquivo: excelFile.excelSuFile,
digite: "aplicativo/vnd.ms-excel"
}
]
})

captura de tela do correio -
image

Por favor me ajude como resolver o mesmo.

unknown or a waiting for feedback non-library issue

Todos 3 comentários

Olá @prasoojalan ,

Parece que você tem um problema com o caminho para o arquivo ou com a codificação do arquivo. Eu verificaria os valores de excelFile.* em seu código para garantir que o arquivo exista. Então, eu garantiria que o próprio arquivo fosse codificado em base64 corretamente. Talvez esta ferramenta possa ajudar com o último.

Obrigado pela atenção,

Elmer

Olá @ Elmer

Meu código completo para criar e enviar arquivo é como -
Tentei dar um caminho raiz de anexo, mas também não funcionou. O mesmo arquivo excel gerado , é baixado com sucesso no navegador .... qual código estou faltando ou não consigo entender o conceito corretamente ... você pode me ajudar ..

Na função createExcelFile com "C" como parâmetro, estou retornando a pasta de trabalho onde não em outros casos.

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

Olá @Elmer

Obrigado pela sua sugestão, me ajudou a entender o fluxo do meu código que estava me intrigando muito.
Descobri meu erro e resolvi. Meu código gerou um arquivo excel sem registros no momento em que o e-mail foi enviado. Então, eu removi meu código de correio da função e criei uma função separada e chamei a função após a função getExcelFile. Dessa forma, tive a certeza de que os arquivos foram criados e o arquivo foi anexado corretamente.

Mais uma vez, muito obrigado por me ajudar a focar no meu código antes de levantar mais perguntas.

Obrigado pela atenção,

Prasoon Kumar Jalan

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

polkhovsky picture polkhovsky  ·  3Comentários

mikemaccana picture mikemaccana  ·  4Comentários

murphman300 picture murphman300  ·  4Comentários

danielflippance picture danielflippance  ·  4Comentários

TobiahRex picture TobiahRex  ·  3Comentários