如何从axios AJAX请求中将PDF blob作为电子邮件附件发送到nodemailer

时间:2017-10-29 16:31:39

标签: javascript node.js stream axios nodemailer

我有以下代码将一些html发送到我的node.js API并将其转换为PDF。然后,我想将该PDF作为附件发送。文档说使用流/文件路径等是通过附件的content属性完成的,但我不知道如何处理我的blob数据。

我尝试了以下操作,但导致节点错误为Invalid non-string/buffer chunk。我可以在content中发送包含随机文本的电子邮件,并附上PDF但不可读。

如何在不先保存文件的情况下获取blob数据并将其作为PDF附件发送?

emailInvoice () {
    Axios({
      method: 'post',
      url: 'http://myApi/api/html-to-pdf',
      data: {
        html: this.getInvoiceHtml()
      },
      responseType: 'blob'
    }).then(function (pdfResponse) {
      Axios.post('http://localhost:4000/api/send-email', {
        host: '##',
        port: '26',
        user: '##',
        pass: '##',
        to: '##',
        from: '##',
        subject: 'Invoice ' + this.model.doc.ref,
        text: 'Test Text',
        html: '<b>TEST</b>',
        attachments: [{
          filename: this.model.doc.ref + '.pdf',
          content: pdfResponse.data,
          contentType: 'application/pdf'
        }]
      }).then(function (response) {
        console.log('Email Success')
        console.log(response)
      }).catch(function (error) {
        console.log('Email Error')
        console.log(error)
      })
    }.bind(this)).catch(function (error) {
      console.log('PDF Error')
      console.log(error)
    })
}

修改 - 我已尝试删除responseType: 'blob',因此我的数据类似于:

  

%PDF-1.4↵10obj↵&lt;&lt;↵/ Title(��)↵/ Creator(��)↵/ Producer(��Qt   5.5.1)↵/ CreationDate(D:20171030091844)↵&gt;&gt;↵endobj↵20obj↵&lt;&lt;↵/ T

我现在正设法发送一个合适大小的PDF,但它是空白的。

编辑2

我刚刚为我的节点api添加了一条新路由,并完成了所有服务器端的工作。直接将流数据从html-pdf传递到nodemailer似乎有效。我仍然对如何在节点制作者中将此数据作为文件附件发送而不首先保存文件感兴趣。

0 个答案:

没有答案