通过NodeJS发送带有附件的邮件

有没有任何库的NodeJS发送附件的邮件?

以最好的问候,sdepold

是的,这非常简单,我使用nodemailer: npm install nodemailer --save

 var mailer = require('nodemailer'); mailer.SMTP = { host: 'host.com', port:587, use_authentication: true, user: 'you@example.com', pass: 'xxxxxx' }; 

然后阅读文件并发送电子邮件:

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

尝试与nodemailer,例如试试这个:

  var nodemailer = require('nodemailer'); nodemailer.SMTP = { host: 'mail.yourmail.com', port: 25, use_authentication: true, user: 'info@youdomain.com', pass: 'somepasswd' }; var message = { sender: "sender@domain.com", to:'somemail@somedomain.com', subject: '', html: '<h1>test</h1>', attachments: [ { filename: "somepicture.jpg", contents: new Buffer(data, 'base64'), cid: cid } ] }; 

最后,发送消息

  nodemailer.send_mail(message, function(err) { if (!err) { console.log('Email send ...'); } else console.log(sys.inspect(err)); }); 

我个人使用Amazon SES rest API或Sendgrid rest API,这是最一致的方法。

如果您需要低级别的方法,请使用https://github.com/Marak/node_mailer并设置您自己的smtp服务器(或者您也可以访问的服务器&#xFF09;

http://blog.nodejitsu.com/sending-emails-in-node

你有没有尝试过的Nodemailer ?

Nodemailer支持

  • Unicode使用任何字符
  • HTML内容以及纯文本替代
  • 附件
  • 在HTML中embedded图像
  • SSL(但不是STARTTLS)

你可以使用nodejs-phpmailer

您也可以使用AwsSum的Amazon SES库:

在那里,有一个名为SendEmail和SendRawEmail的操作,后者可以通过服务发送附件。

使用邮件包,它非常灵活和容易。

另一个可供select的库是emailjs 。

我在这里尝试了一些自己的build议,但运行代码抱怨send_mail()和sendMail()是未定义的(尽pipe我只是简单地复制和粘贴代码进行小小的调整)。 我使用节点0.12.4和npm 2.10.1。 我没有电子邮件的问题,这只是我的架子上。 而且它具有很好的附件包装,所以你可以根据自己的喜好轻松地附上各种方式,与此处的nodemailer例子相比。

Nodemailer用于任何nodejs邮件需求。 这是目前最好的:D

我没有使用它,但是nodemailer( npm install nodemailer )看起来像你想要的。

用快递邮件发送( https://www.npmjs.com/package/express-mailer

发送PDF – >

 var pdf="data:application/pdf;base64,JVBERi0xLjM..etc" attachments: [ { filename: 'archive.pdf', contents: new Buffer(pdf.replace(/^data:application\/(pdf);base64,/,''), 'base64') } ] 

发送图像 – >

 var img = 'data:image/jpeg;base64,/9j/4AAQ...etc' attachments: [ { filename: 'myImage.jpg', contents: new Buffer(img.replace(/^data:image\/(png|gif|jpeg);base64,/,''), 'base64') } ] 

发送txt – >

 attachments: [ { filename: 'Hello.txt', contents: 'hello world!' } ] 

你可以使用官方的谷歌这个API。 他们为此提供了节点包。 谷歌官方API

我附上了我的代码的一部分,为我做了附件

 function makeBody(subject, message) { var boundary = "__myapp__"; var nl = "\n"; var attach = new Buffer(fs.readFileSync(__dirname + "/../"+fileName)) .toString("base64"); // console.dir(attach); var str = [ "MIME-Version: 1.0", "Content-Transfer-Encoding: 7bit", "to: " + receiverId, "subject: " + subject, "Content-Type: multipart/alternate; boundary=" + boundary + nl, "--" + boundary, "Content-Type: text/plain; charset=UTF-8", "Content-Transfer-Encoding: 7bit" + nl, message+ nl, "--" + boundary, "--" + boundary, "Content-Type: Application/pdf; name=myPdf.pdf", 'Content-Disposition: attachment; filename=myPdf.pdf', "Content-Transfer-Encoding: base64" + nl, attach, "--" + boundary + "--" ].join("\n"); var encodedMail = new Buffer(str).toString("base64").replace(/\+/g, '-').replace(/\//g, '_'); return encodedMail; }