Как прикрепить читаемый поток node.js к электронной почте Sendgrid?

Я использую PDFKit для создания PDF-файлов. Я использую Nodejitsu для хостинга, поэтому не могу сохранить PDF-файлы в файл, но могу сохранить их в читаемый поток. Я хотел бы прикрепить этот поток к электронному письму Sendgrid, например:

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

Я пробовал doc.output() безрезультатно.


person delwin    schedule 27.05.2014    source источник


Ответы (2)


Чтобы использовать API SendGrid nodejs с файлом потоковой передачи, просто преобразуйте потоковую передачу в буфер. Вы можете преобразовать читаемый поток в буфер, используя поток в массив.

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 }]
  })
})
person scottmotte    schedule 27.05.2014

Недавно я сам боролся с этой проблемой, и я просто хотел поделиться тем, что сработало для меня:

//PdfKit

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


//Sendgrid API

var email = new sendgrid.Email();

    email.addTo         ('[email protected]');
    email.setFrom       ('[email protected]');
    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» содержимое вложенного файла.

person Ren    schedule 05.03.2016