Intento usar una imagen incrustada en mi plantilla, pero no se envía el correo electrónico. La ruta debe ser correcta y no recibo ningún error. Cuando elimino la imagen todo funciona bien y estoy recibiendo el correo.
const mailController = { sendAnswers: async(certificate) => { try { let pathToAttachment = `./documents/${certificate.company.name}/${certificate.company.name}_${certificate.company.selectedLanguage}.pdf`; let attachment = fs.readFileSync(pathToAttachment).toString("base64"); let answerTemplate = { to: 'invoice@test.de', from: 'no-reply@test.de', // Use the email address or domain you verified above subject: 'Test', text: 'Test Test Test', html: ` <img alt="test" src="cid:logo"> <div style="margin: 20px 20%; padding: 24px; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 6px;"><h1 style="text-align: center">Thank You! ${certificate.company.name}</h1> <p style="text-align: center">Text<br> More Text More and More Text</p> </div> `, attachments: [ { content: attachment, filename: `${certificate.company.name}_Answers.pdf`, type: "application/pdf", disposition: "attachment" }, { content: fs.readFileSync(`./assets/images/Changemaker-Siegel.png`, { encoding: 'base64'}), filename: "Changemaker", type: "image/png", content_id: "logo", disposition: "inline" } ] }; await sgMail.send(answerTemplate); } catch (error) { console.error(error); if (error.response) { console.error(error.response.body) } } }}
El problema es que el archivo adjunto de su logotipo no se envía como una cadena base 64. Está leyendo el archivo adjunto como si su codificación fuera base 64, que es otra cosa.
Así que tienes:
content: fs.readFileSync(`./assets/images/Changemaker-Siegel.png`, { encoding: "base64", }),Pero tu necesitas:
content: fs.readFileSync(`./assets/images/Changemaker-Siegel.png`).toString("base64"),