En nuestra aplicación estamos adjuntando PDF, en algún escenario aleatorio, el archivo adjunto se corrompe. Así que decidimos verificar si el tamaño del archivo adjunto es el mismo que antes y después de adjuntar el archivo adjunto, y validar el mismo.
No pude encontrar ninguna información sobre cómo se calcula el tamaño del mensaje o una forma de saber el tamaño del archivo adjunto a partir de la devolución de llamada de transporter.sendMail().
Observamos que los cambios en el tamaño al manipular los atributos no tienen ningún patrón repetible que podamos aprovechar.
var mailOptions = { from: "<some email>", to: "<some email>", subject: "S", text: "", attachments: [ { filename: "a.pdf", path: "./sample.pdf", }, ], }; const getFileSize = () => { const fileSize = fs.statSync(mailOptions.attachments[0].path); return fileSize.size; }; const calTotalSize = () => { let total = 165; if (mailOptions?.from?.length > 0) { total = total + mailOptions.from.length; } if (mailOptions?.to?.length > 0) { total = total + mailOptions.to.length; } if (mailOptions?.subject?.length > 0) { total = total + mailOptions.subject.length + 11; } if (mailOptions?.text?.length > 0) { total = total + mailOptions.text.length + 50; } if (mailOptions?.attachments?.length > 0) { if (mailOptions.attachments?.filename?.length > 0) { total = total + mailOptions.attachments[0].filename.length; } if (mailOptions.attachments?.path?.length > 0) { total = total + mailOptions.attachments[0].path.length; } total = total + getFileSize(); } return total; }; transporter.sendMail(mailOptions, function (error, info) { if (error) { console.log(error); } else { console.log(getFileSize(), "calculate original pdf size"); console.log(calTotalSize(), "calculate total size"); console.log(info.messageSize, "Email size"); } });Gracias.