如何将node.js可读流附加到Sendgrid电子邮件?

时间:2014-05-27 18:15:55

标签: node.js sendgrid node-pdfkit

我使用PDFKit生成PDF。我使用Nodejitsu进行托管,因此我无法将PDF保存到文件中,但我可以将它们保存为可读流。我想在Sendgrid电子邮件中添加该流,如下所示:

sendgrid.send({
    to: email,
    files: [{ filename: 'File.pdf', content: /* what to put here? */ }]
    /* ... */
});

我试过doc.output()无效。

2 个答案:

答案 0 :(得分:6)

要将SendGrid nodejs API与流文件一起使用,只需将流转换为缓冲区即可。您可以使用stream-to-array将可读流转换为缓冲区。

var streamToArray = require('stream-to-array');

streamToArray(your_stream, function (err, arr) {
  var buffer = Buffer.concat(arr)
  sendgrid.send({
    to: email,
    files: [{ filename: 'File.pdf' content: buffer }]
  })
})

答案 1 :(得分:0)

我最近自己也在努力解决这个问题,我只是想分享一下对我有用的东西:

//PdfKit

var doc = new PDFDocument({
    size: 'letter'
});
doc.text('My awesome text');
doc.end();


//Sendgrid API

var email = new sendgrid.Email();

    email.addTo         ('XXX@gmail.com');
    email.setFrom       ('XXX@gmail.com');
    email.setSubject    ('Report');
    email.setText       ('Check out this awesome pdf');
    email.addFile       ({
            filename: project.name + '.pdf',
            content: doc,
            contentType: 'application/pdf'
        });

sendgrid.send(email, function(err, json){
    if(err) {return console.error(err);}
    console.log(json);
});

关键是将“doc”作为文件附件中的内容