web-dev-qa-db-ja.com

電子メール本文に画像を埋め込むnodemailer nodejs

私はnodemailerコミュニティで使用されているアプローチに従っています site ですが、エラーが発生しているので動作させることができません

   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' }

Nodemailerのオプションは次のとおりです

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

そして、emailBody変数には、イメージタグ行のあるテンプレート文字列があります

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

エクスプレスまたは何のために静的アセットを設定する必要がありますか、画像ファイルは上記のコードを持つファイルと同じフォルダにあります。

11
Teebo

だから私は...

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

....

しかし面白いのは、これが私が達成しようとしていたことではありません。なぜなら、画像をメール本文に入れたかったからです。

ちょっと、ファイル名を。svgから。pngに変更しただけです。もう1つの間違いはテンプレート内の画像でした。

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

他の誰かがこれに遭遇した場合のここでの対応! __dirname上記は本当に役に立ちましたが、これは実際にメールに埋め込まれた画像を見るための私のコードです

私のimgタグ:

<img src="cid:logo">

添付ファイルスニペット:

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

https://community.nodemailer.com/using-embedded-images/ でこの素晴らしい例を見つけました。こちらが投稿です

埋め込み画像の使用

添付ファイルは、HTML本文の埋め込み画像として使用できます。この機能を使用するには、添付ファイルの追加プロパティであるcid(ファイルの一意の識別子)を設定する必要があります。これは、添付ファイルへの参照です。同じcid値をHTMLの画像URLとして使用する必要があります(cid:をURLプロトコルとして使用、以下の例を参照)。

NB!cid値は可能な限り一意でなければなりません!

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