web-dev-qa-db-fra.com

Intégrer l'image dans le corps du courrier électronique nodemailer nodejs

Je suis l'approche utilisée dans la communauté nodemailer site mais je n'arrive pas à le faire fonctionner car j'obtiens l'erreur

   Failed to send email { Error: ENOENT: no such file or directory, open 
'./rello-logo-full-svg.svg'
 errno: -2,
  code: 'ESTREAM',
  syscall: 'open',
  path: './rello-logo-full-svg.svg',
  command: 'API' }

Les options de nodemailer sont les suivantes

    let mailOptions = {
        from: '<from_email>', 
        to: to_email_address.toString(),
        subject: 'Subject',
        text: 'Hello world', // plain text body
        attachments: [{
          filename: 'rello-logo-full-svg.svg',
          path: './rello-logo-full-svg.svg',
          cid: 'unique@cid'
      }],
        html: emailBody
    };

Et dans la variable emailBody j'ai une chaîne de modèle avec une ligne de tag d'image comme ça

<img style="width:250px;" cid:unique@cid>

Dois-je peut-être besoin de définir les actifs statiques pour express ou quoi, le fichier image est dans le même dossier que le fichier qui a le code ci-dessus, toute aide est appréciée

11
Teebo

Je l'ai donc fait fonctionner en utilisant ...

 path: __dirname + '/rello-logo-full-svg.svg',

....

Mais drôle, ce n'est pas ce que j'essayais de réaliser parce que je voulais que l'image soit dans le corps de l'e-mail, mais j'espère que cela aidera quelqu'un d'autre.

Hé, je viens de changer le nom du fichier de . Svg à . Png, une autre erreur que j'ai faite était avec l'image dans le modèle, je l'ai changé en

 <img style="width:250px;" src="cid:unique@cid">
5
Teebo

Répondre ici au cas où quelqu'un d'autre rencontrerait cela! Le __dirname ci-dessus a été très utile, mais voici mon code pour voir l'image incorporée dans l'e-mail

Mon tag img:

<img src="cid:logo">

Extrait de mes pièces jointes:

attachments: [{
     filename: 'Logo.png',
     path: __dirname +'/folder/Logo.png',
     cid: 'logo' //my mistake was putting "cid:logo@cid" here! 
}]
13
RatKing

J'ai trouvé un excellent exemple de cela sur https://community.nodemailer.com/using-embedded-images/ . Voici le post

Utilisation d'images intégrées

Les pièces jointes peuvent être utilisées comme images incorporées dans le corps HTML. Pour utiliser cette fonction, vous devez définir une propriété supplémentaire de la pièce jointe - cid (identifiant unique du fichier) qui est une référence au fichier joint. La même valeur cid doit être utilisée comme URL de l'image en HTML (en utilisant cid: comme protocole URL, voir l'exemple ci-dessous).

NB! la valeur cid doit être aussi unique que possible!

var mailOptions = {
    ...
    html: 'Embedded image: <img src="cid:[email protected]"/>',
    attachments: [{
        filename: 'image.png',
        path: '/path/to/file',
        cid: '[email protected]' //same cid value as in the html img src
    }]
}
1
ratskin