将图像嵌入电子邮件正文nodemailer nodejs中

时间:2018-01-25 18:13:14

标签: javascript node.js express nodemailer

我正在关注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>

我是否可能需要为express设置静态资产或者什么,图像文件与具有上述代码的文件位于同一文件夹中,感谢任何帮助

4 个答案:

答案 0 :(得分:11)

如果其他人遇到此事,请回复此处!上面的__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! 
}]

答案 1 :(得分:5)

所以我通过使用它来工作 ...

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

...

但有趣的是,这不是我想要实现的,因为我希望图像在电子邮件正文中,希望这会帮助其他人。

嘿,我刚刚将文件名从 .svg 更改为 .png ,我犯的另一个错误是模板中的图片,我已将其更改为< / p>

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

答案 2 :(得分:0)

我在https://community.nodemailer.com/using-embedded-images/找到了一个很好的例子。这是帖子

  

使用嵌入式图像

     

附件可以用作嵌入图像   HTML正文。要使用此功能,您需要设置以下属性   附件– cid(文件的唯一标识符),它是   参考附件文件。必须将相同的cid值用作   HTML中的图片网址(使用cid:作为网址协议,请参见示例   下面)。

     

注意! cid值应尽可能唯一!

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

答案 3 :(得分:-2)

Chris 回答您的问题 - 我们可以借助 content-desposition 将图像嵌入电子邮件正文而不是附件:内嵌附件中的文件