Node: использование сквозного потока для Nodemailer

Я создаю документ Word с помощью officegen, который затем планирую прикрепить к электронной почте с помощью Nodemailer (и Sendgrid).

officegen выводит поток, но я бы предпочел передать его прямо во вложение, а не сохранять документ Word локально, а затем прикреплять его.

// Generates output file    
docx.generate(fs.createWriteStream ('out.docx'));

var client = nodemailer.createTransport(sgTransport(options));

var email = {
    from: 'email@here',
    to: user.email,
    subject: 'Test Email send',
    text: 'Hi!\n\n' +
        'This is a test email.'
    attachments: [{ // stream as an attachment
        filename: 'out.docx',
        content: 'out.docx' // Ideally, I'd like this to be a stream through docx.generate()
    }]
};

client.sendMail(email, function(err, info) {
    if (err) {
        console.log(err);
        return res.send(400);
    }
    return res.send(200);
});

person ChrisE    schedule 07.11.2014    source источник


Ответы (1)


Вы можете передать объект потока непосредственно в content. officegen, похоже, не поддерживает конвейерную передачу, поэтому вам нужен сквозной поток, чтобы справиться с этим.

var PassThrough = require('stream').PassThrough;
var docstream = new PassThrough();
docx.generate(docstream);
...
var attachments = [{ // stream as an attachment
    filename: 'out.docx',
    content: docstream
}];
person Andris    schedule 13.11.2014