在node.js中发送带有图片附件的电子邮件

目前,我可以使用代码沿着以下方向发送node.js中的电子邮件:

var nodemailer = require("nodemailer"); var smtpTransport = nodemailer.createTransport("SMTP",{ service: "Gmail", auth: { user: "gmail.user@gmail.com", pass: "gmailpass" } }); smtpTransport.sendMail({ from: "My Name <me@example.com>", // sender address to: "Your Name <you@example.com>", // comma separated list of receivers subject: "Hello ✔", // Subject line text: "Hello world ✔" // plaintext body }, function(error, response){ if(error){ console.log(error); }else{ console.log("Message sent: " + response.message); } }); 

我怎样才能从这个电子邮件的HTML表单发送附件的上传图像? 另外,我可以发送电子邮件中的图像,而不上传到服务器? 如果没有,那没问题。 这是我的HTML格式:

 <form id="mainForm"> <input type="file" id="fileUpload"> <input type="submit" id="submit" name="submit"> </form> 

我怎样才能把这个文件包含在我使用node.js发送的邮件里?

你可以尝试这样的事情。 使用busboy获取文件,然后一旦你得到的文件将其转换为base64,并将其添加到附件属性为您的邮件选项。 唯一的是我不知道如果文件参数回来作为缓冲区。 如果它不,你只需要将该文件转换为64位,并将能够发送它作为附件

 var app = express(); var Busboy = require('busboy'); var nodemailer = require("nodemailer"); var smtpTransport = nodemailer.createTransport("SMTP",{ service: "Gmail", auth: { user: "gmail.user@gmail.com", pass: "gmailpass" } }); app.post('/email', function(req, res){ var busboy = new Busboy({ headers: req.headers }); var attachments = []; var mailOptions = { from: "My Name <me@example.com>", // sender address to: "Your Name <you@example.com>", // comma separated list of receivers subject: "Hello ✔", // Subject line text: "Hello world ✔" // plaintext body }; busboy .on('file', function(fieldname, file, filename, encoding, mimetype){ attachments.push({ filename: filename, content: file.toString('base64'), encoding: 'base64' }); }) .on('finish', function() { mailOptions.attachments = attachments; smtpTransport.sendMail(mailOptions, function (err, info) { if (err) { //handle error } // email sent }); }); });