Sendgrid-nodejs: los archivos adjuntos en los correos tienen 0 bytes

Creado en 18 ene. 2019  ·  3Comentarios  ·  Fuente: sendgrid/sendgrid-nodejs

Hola,

Estoy usando @sendgrid/mail - "^6.3.1" y nodo - 10.14.1.

Mi problema es que cuando envío datos de una sola fila de la base de datos en un archivo adjunto de Excel, puedo recibir un correo con un archivo adjunto, pero cuando envío datos de varias filas de la base de datos en un archivo adjunto de Excel, recibo un archivo adjunto con 0 bytes. He incrustado imágenes también en el archivo. Estoy tratando de adjuntar el mismo archivo creado a través del módulo exceljs. Lo intenté mucho pero fallé ... donde puedo generar el mismo archivo de Excel, con este código en el navegador.
"
res.setHeader("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
res.setHeader("Contenido-Disposición", "archivo adjunto;nombre de archivo='" + excelFile.excelOffFile + "'");
libroFinal.xlsx.write(res).then(() => {
res.end(); });s
"
Mi código para enviar correo es:
sgMail.send({
a: config.get("mail.defaultAdd"),
de: fromMailAdd,
asunto: "Pedido con archivo adjunto de Excel enviado a través del software",
html: <h1>Test Mail</h1> ,
archivos adjuntos: [
{
contenido: fs.readFileSync(excelFile.excelOffFilePath, {codificación:"base64"}),
nombre de archivo: excelFile.excelOffFile,
escriba: "aplicación/vnd.ms-excel"
},
{
contenido: fs.readFileSync(excelFile.excelFactFilePath, { codificación: "base64" }),
nombre de archivo: excelFile.excelFactFile,
escriba: "aplicación/vnd.ms-excel"
},
{
contenido: fs.readFileSync(excelFile.excelBrFilePath, { codificación: "base64" }),
nombre de archivo: excelFile.excelBrFile,
escriba: "aplicación/vnd.ms-excel"
},
{
contenido: fs.readFileSync(excelFile.excelSuFilePath, { codificación: "base64" }),
nombre de archivo: excelFile.excelSuFile,
escriba: "aplicación/vnd.ms-excel"
}
]
})

captura de pantalla de correo -
image

Por favor, ayúdame a resolver lo mismo.

unknown or a waiting for feedback non-library issue

Todos 3 comentarios

Hola @prasoojalan ,

Parece que tiene un problema con la ruta al archivo o con la codificación del archivo. Verificaría dos veces los valores de excelFile.* en su código para asegurarme de que el archivo existe. Luego, me aseguraría de que el archivo en sí esté codificado en base64 correctamente. Tal vez esta herramienta pueda ayudar con esto último.

Con los mejores deseos,

Elmer

Hola @Elmer

Mi código completo para crear y enviar archivos es el siguiente:
Intenté dar una ruta raíz de archivo adjunto, pero tampoco funcionó. El mismo archivo de Excel generado, se descargó con éxito en el navegador... qué código me falta o no puedo entender el concepto correctamente... ¿pueden ayudarme?

En la función createExcelFile con "C" como parámetro, estoy devolviendo el libro de trabajo donde no en otros 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));
};

Hola @Elmer

Gracias por su sugerencia, me ayudó a comprender el flujo de mi código, lo que me desconcertaba mucho.
Descubrí mi error y lo resolví. Mi código generó un archivo de Excel sin registros en el momento en que se envió el correo. Entonces, eliminé mi código de correo de la función y creé una función separada y luego llamé a la función después de la función getExcelFile. De esta manera estaba seguro de que los archivos se crearon y el archivo se adjuntó correctamente.

Una vez más, muchas gracias por ayudarme a concentrarme en mi código antes de plantear más preguntas.

Con los mejores deseos,

Prasoon Kumar Jalan

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

umarhussain15 picture umarhussain15  ·  3Comentarios

thinkingserious picture thinkingserious  ·  4Comentarios

Loriot-n picture Loriot-n  ·  4Comentarios

polkhovsky picture polkhovsky  ·  3Comentarios

kiranshashiny picture kiranshashiny  ·  4Comentarios