2014-11-07 4 views
2

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

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

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

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

var email = { 
    from: '[email protected]', 
    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); 
}); 

ответ

4

Вы можете передать объект потока непосредственно на 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 
}];