如何使用nodemailer将文件附加到电子邮件

我有节点 nodejs发送电子邮件与nodemailer的代码,但我想附加文件到一个电子邮件,但我无法find办法,我在网上search,但我找不到有用的东西。是否有任何方式,我可以附上文件与该或任何资源,可以帮助我附加文件与nodemailer?

var nodemailer = require('nodemailer'); var events = require('events'); var check =1; var events = new events.EventEmitter(); var smtpTransport = nodemailer.createTransport("SMTP",{ service: "gmail", auth: { user: "example@gmail.com", pass: "pass" } }); function inputmail(){ ///////Email const from = 'example<example@gmail.com>'; const to = 'example@yahoo.com'; const subject = 'example'; const text = 'example email'; const html = '<b>example email</b>'; var mailOption = { from: from, to: to, subject: subject, text: text, html: html } return mailOption; } function send(){ smtpTransport.sendMail(inputmail(),function(err,success){ if(err){ events.emit('error', err); } if(success){ events.emit('success', success); } }); } /////////////////////////////////// send(); events.on("error", function(err){ console.log("Mail not send"); if(check<10) send(); check++; }); events.on("success", function(success){ console.log("Mail send"); }); 

在var mailOption中包含关键附件,如下所示:

 var mailOptions = { ... attachments: [ { // utf-8 string as an attachment filename: 'text1.txt', content: 'hello world!' }, { // binary buffer as an attachment filename: 'text2.txt', content: new Buffer('hello world!','utf-8') }, { // file on disk as an attachment filename: 'text3.txt', path: '/path/to/file.txt' // stream this file }, { // filename and content type is derived from path path: '/path/to/file.txt' }, { // stream as an attachment filename: 'text4.txt', content: fs.createReadStream('file.txt') }, { // define custom content type for the attachment filename: 'text.bin', content: 'hello world!', contentType: 'text/plain' }, { // use URL as an attachment filename: 'license.txt', path: 'https://raw.github.com/andris9/Nodemailer/master/LICENSE' }, { // encoded string as an attachment filename: 'text1.txt', content: 'aGVsbG8gd29ybGQh', encoding: 'base64' }, { // data uri as an attachment path: 'data:text/plain;base64,aGVsbG8gd29ybGQ=' } ] 

}

select适合您需求的选项。

链接: Nodemailer存储库GitHub

祝你好运!!

我已经testing了这些附件的每一个方法,但对我来说没有问题。 这是我的邮件函数代码,没有smtp传输configuration:

 function mailer(from, to, subject, attachments, body) { // Setup email var mailOptions = { from: from, to: to, subject: subject, attachments: attachments, html: body }; // send mail with defined transport object smtpTransport.sendMail(mailOptions, function(error, response){ if(error) console.log(error); else console.log("Message sent: " + response.message); // shut down the connection pool, no more messages smtpTransport.close(); }); } 

然后电话:

 var attachments = [{ filename: 'test.pdf', path: __dirname + '/pdf/test.pdf', contentType: 'application/pdf' }]; mailer("exped@gmail.com", "mymail@gmail.com", "Test", attachments, "<h1>Hello</h1>"); 

邮件成功,但没有附件。 即使我设置了string或缓冲区附件也是一样的结果。

另一种解决scheme是使用CDN在线托pipe图像,并链接到HTML中的在线图像源,例如。 <img src="list_image_url_here">

(我在使用nodemailer 2.6.0版本时,对nodemailer的图像embedded有问题,这就是为什么我想出了这个解决方法。)

这个解决scheme的另外一个好处是你不发送附件给nodemailer,所以发送过程更加简化。

 var express = require('express'); var router = express(), multer = require('multer'), upload = multer(), fs = require('fs'), path = require('path'); nodemailer = require('nodemailer'), directory = path.dirname(""); var parent = path.resolve(directory, '..'); // your path to store the files var uploaddir = parent + (path.sep) + 'emailprj' + (path.sep) + 'public' + (path.sep) + 'images' + (path.sep); /* GET home page. */ router.get('/', function(req, res) { res.render('index.ejs', { title: 'Express' }); }); router.post('/sendemail', upload.any(), function(req, res) { var file = req.files; console.log(file[0].originalname) fs.writeFile(uploaddir + file[0].originalname, file[0].buffer, function(err) { //console.log("filewrited") //console.log(err) }) var filepath = path.join(uploaddir, file[0].originalname); console.log(filepath) //return false; nodemailer.mail({ from: "yourgmail.com", to: req.body.emailId, // list of receivers subject: req.body.subject + " ✔", // Subject line html: "<b>" + req.body.description + "</b>", // html body attachments: [{ filename: file[0].originalname, streamSource: fs.createReadStream(filepath) }] }); res.send("Email has been sent successfully"); }) module.exports = router; 
 var mailer = require('nodemailer'); mailer.SMTP = { host: 'host.com', port:587, use_authentication: true, user: 'you@example.com', pass: 'xxxxxx' }; Then read a file and send an email : fs.readFile("./attachment.txt", function (err, data) { mailer.send_mail({ sender: 'sender@sender.com', to: 'dest@dest.com', subject: 'Attachment!', body: 'mail content...', attachments: [{'filename': 'attachment.txt', 'content': data}] }), function(err, success) { if (err) { // Handle error } } });