Stripe: прикрепите счет-фактуру в формате pdf к электронной почте - PullRequest
0 голосов
/ 28 мая 2020

В настоящее время я пытаюсь отправить электронные письма с прикрепленными счетами в формате pdf клиентам с nodejs, но не могу понять, как получить файл PDF из поля invoice_pdf.

Я пробовал fs, got и request, но я не могу получить содержимое файла.

например, я пробовал:

let file = await got(invoice.invoice_pdf)
let fileContent = Buffer.from(file['body'])
...
// mail conf
attachments: [{
    'type': 'application/pdf',
    'name': invoice.number + '.pdf',
    'content': fileContent.toString('base64'),
}],

К полученному электронному письму прикреплен PDF-файл, но он пустая страница без содержимого.

Любая помощь?
Большое спасибо

РЕДАКТИРОВАТЬ: выполнить c вложений Mandrill enter image description here

Ответы [ 2 ]

0 голосов
/ 03 июня 2020

Разобрались, используя потоки:

async function readFile(url: string): Promise<Buffer> {
    return new Promise(function(resolve,reject){
        const bufs = []
        let finalBuf = Buffer.from('')
        got.stream(url)
        .on('data', d => bufs.push(d))
        .on('end', async function () {
            finalBuf = Buffer.concat(bufs)
            resolve(finalBuf)
        })
        .on('error', reject)
    })
}

export async function sendInvoiceEmail(invoice: Stripe.Invoice) {
    try {
            ...
            const finalBuf = await readFile(invoice.invoice_pdf)

            const options = {
                ...
                attachments: [
                    {
                        'type': 'application/pdf',
                        'name': 'invoice.pdf',
                        'content': finalBuf.toString('base64'),
                    }
                ],
            }

            await MailerClient.send(options)
    } catch (err) {
        logger.error(err, 'Error while trying to send mail')
        throw err
    }
}

Спасибо тем, кто пытался помочь :)

0 голосов
/ 28 мая 2020

Вы пробовали использовать NPM Package pdfreader или pdf2json, эти пакеты помогут вам сначала прочитать содержимое, затем вы можете сохранить данные в переменной, а затем передать их во вложения.

...