node.js - 通过nodejs nodemailer后端从pdfkit发送PDF
问题描述
我看到了这个问题,但我的代码似乎略有不同并且无法正常工作。 在 nodejs 应用程序中使用 PDFKit 将动态创建的 PDF 作为附件发送
主要区别是我从后端而不是浏览器发送这封电子邮件。
另请注意,生成的文件类型很好,因此将其传递到电子邮件可能是个问题。
const Email = require('email-templates');
const PdfKit = require('pdfkit');
const SVGToPDF = require('svg-to-pdfkit');
const fs = require('fs');
const service = new Email({
message: {
from: 'aaron.test@gmail.com'
},
send: true
transport: require('../config/smtp.json') // my smtp config. Works without attachment
});
function generatePdfAndSend() {
var doc = new PdfKit();
const stream = doc.pipe(fs.createWriteStream("output.pdf"));
doc.font('backend/fonts/MADE Canvas Regular PERSONAL USE.otf')
.fontSize(25)
.text('sample text', 100, 100);
fs.readFile('backend/images/Happy Easter 5.svg', 'utf8', (err, contents) => {
SVGToPDF(doc, contents, 100, 200, {});
doc.end();
stream.on('finish', function() {
sendEmail("templateName", "myEmail", doc);
});
});
}
function sendEmail(template, to, attachment) {
service.send({
template: template,
message: {
to: to,
attachments: [
{
filename: 'text1.pdf',
content: attachment,
contentType: 'application/pdf'
}
]
},
locals: vars
})
.then(console.log).catch(console.error);
}
解决方案
我在文档中看不到任何允许将对象作为附件传递的内容。
而不是将 PdfKit 对象传递给您的 sendEmail 函数。传递磁盘上输出文件的位置。
推荐阅读
- c++ - C++ 程序在 VS 上运行顺畅,但在 Linux Mint 上运行不畅
- c++ - c++ netplan ubuntu yaml 读取和创建
- ruby - 如何从logstash中的netdata聚合指标?
- c# - 如何获得一组数字的所有组合,这些组合将加起来或仅略超过一组数字?
- jquery - 如何在 jQuery 函数中调用数据样式
- python - 如何使用 pdfrw 库编辑可编辑的 pdf?
- bash - 无法通过 Jenkinsfile 在 Bash 脚本中执行 AWS CLI
- mysql - Mysql LEFT JOIN 在两个参数上,在非常大的表上具有一个精确匹配和一个 LIKE 匹配 - 性能
- unity3d - Unity 2018.3.X 自动完成问题
- android - 如何使用 RxJava2 和 Room Persistence Library 实现内存缓存?