javascript - 如何使用 node.js 中的 nodemailer 和请求模块将图像附加到来自 URL 的电子邮件?

标签 javascript node.js email nodemailer

我是 javascript 和 node.js 的新手,正在尝试通过做一些有用的事情来学习它。所以,我想发送一封带有图像附件的电子邮件。图像将通过发出 HTTP GET 请求从远程服务器检索,并通过 nodemailer (SMTP) 使用 Gmail 发送到电子邮件地址

By reading the docs and looking through examples ,我设法发送了一封没有附件的电子邮件,但我不知道如何使用 Streams 发送它。我使用了以下代码,但它返回了一个错误,我无法自行修复并需要帮助:

var nodemailer = require('nodemailer');
var request = require('request');
var config = require('../config');
var mailer;

mailer = function (opts) {
    var transporter = nodemailer.createTransport({
        service: 'Gmail',
        auth: {
            user: config.GmailAuth.email,
            pass: config.GmailAuth.password
        }
    });

    var mailOptions = {
        from: opts.from, // sender address
        to: opts.to, // list of receivers
        subject: opts.subject, // Subject line
        html: opts.body,  // html body
        attachments: [
            {
                filename: 'screenshot.png',
                content: request(opts.imageUrl)  // <-- Error here 
            }
        ]
    };

    transporter.sendMail(mailOptions, function(error, info){
        if (error) {
            return console.log(error);
        } else {
            console.log('Message sent: ' + info.response);
        }
    });
}

mailer({
        from: config.GmailAuth.email,
        to: config.sendToAddress, 
        subject: 'TEST SUBJECT',
        body: 'TEST MESSAGE BODY',
        imageUrl: 'URL_to_an_image_for_HTTP_GET_request'
       });

出现以下错误:

stream.js:74
      throw er; // Unhandled stream error in pipe.
      ^

Error: write after end
    at writeAfterEnd (_stream_writable.js:159:12)
    at Encoder.Writable.write (_stream_writable.js:204:5)
    at Encoder.Writable.end (_stream_writable.js:433:10)
    at Request.<anonymous> (C:\Users\user\Desktop\graphite_monitor\node_modules\
buildmail\src\buildmail.js:573:35)
    at Request.g (events.js:260:16)
    at emitOne (events.js:82:20)
    at Request.emit (events.js:169:7)
    at Request.onRequestError (C:\Users\user\Desktop\graphite_monitor\node_modul
es\request\request.js:820:8)
    at emitOne (events.js:77:13)
    at ClientRequest.emit (events.js:169:7)

问题是什么,我该如何解决?

最佳答案

尝试改变这个:

attachments: [
  {
    filename: 'screenshot.png',
    content: request(opts.imageUrl)  // <-- Error here 
  }
]

到:

attachments: [
  {
    filename: "pin-marker.png",
    path: "http://img.mapeando.net/map/pin-marker.png", // <-- should be path instead of content
    cid: "pin-marker.png"
  }
]

关于javascript - 如何使用 node.js 中的 nodemailer 和请求模块将图像附加到来自 URL 的电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34077507/

相关文章:

javascript - 在 node.js 网络服务器中写入结束后错误

javascript - RailwayJS/Express on Rails : A true node. js 替代 Ruby On Rails?

php - 使用 PHP mail() 函数通过 Exchange 发送电子邮件时出现延迟(使用 sendmail 作为中继)

javascript - .uploadifySettings 未按预期工作

javascript - 获取单击的列表项的 ID 返回未定义

javascript - 在 Node.js 中查找内置对象和函数

email - powershell send-mailmessage错误-helo命令被拒绝:需要标准主机名

javascript - innerHTML 和 <embed> 怎么了?

asp.net - 从母版页注册 javascript 文件

java - 在没有用户干预或 Intent 的情况下发送电子邮件