javascript - NodeMailer net::ERROR_CONNECTION_RESET 400 尝试发送 DataUri 附件时
问题描述
在我datauri
的应用程序中生成 PDF 时出现问题。完成后,我想通过电子邮件将其作为附件发送。我看到可以nodemailer
选择将 adatauri
作为附件发送,幸运的是我jsPDF
有一种获取该数据的方法。不幸的是,当我发送带有 PDF 附件的电子邮件时,我收到此错误:
net::ERROR_CONNECTION_RESET 400 (Bad Request)
我可以很好地发送其他电子邮件,但是当我尝试发送带有datauri
此错误的附件时,每次都会弹出此错误并且电子邮件无法发送。我不确定是不是因为datauri
太大而无法发送……在这种情况下,它只是425kB
大小。
以下是我生成数据并将数据传递给 API 的方式:
AcceptContract(){
let curr = this.state.CurrentContract;
let stores = this.state.StoresSelected;
let list = this.state.PDFs;
if(this.state.CurrentContract <= this.state.TotalContracts){
if(this.state.CurrentContract != this.state.TotalContracts){
curr++
}
stores[this.state.CurrentContract - 1].ContractStatus = "ACCEPTED"
this.GeneratePDF(function(result){
list.push(result);
this.setState({
CurrentContract: curr,
StoresSelected: stores,
PDFs: list,
})
}.bind(this));
}else if(this.state.CurrentContract == this.state.TotalContracts){
console.log('render final button')
}
}
GeneratePDF(callback){
let filename = 'test.pdf'
let pdf = new jspdf('p', 'mm', 'a4');
let pdfList = this.state.PDFs;
let data;
html2canvas(document.getElementById('inner-container')).then(canvas => {
data = pdf.addImage(canvas.toDataURL('image/jpeg'), 'JPEG', 0, 0, 211, 298).output('datauri');
let obj = {
path: data,
}
callback(obj);
});
}
SendRawEmail(){
let to = 'myeemail@email.com'; // change to accounting email
let text = 'this is a test'
let data = this.state.PDFs;
console.log(data);
$.get("/sendRaw", { to: to, subject: 'Contract Testing', text: text, data: data }, function (data) { });
}
this.state.PDFs
在接受合同之前只是一个空数组。
这是API:
app.get('/sendRaw', (request, response) => {
var mailOptions = {
to: request.query.to,
bcc: request.query.bcc,
subject: request.query.subject,
text: request.query.text,
attachment: request.query.data
}
smtpTransport.sendMail({ //email options
from: "myemail@email.com", // sender address. Must be the same as authenticated user if using Gmail.
to: mailOptions.to,
bcc: "myemail@email.com", // sending to itself
subject: mailOptions.subject, // subject
html: mailOptions.text, // body
attachments: mailOptions.attachment,
}, function (error, response) { //callback
if (error) {
console.log(error);
} else {
console.log("Message sent");
response.send(200);
}
smtpTransport.close();
});
})
我真的被这个难住了。我在网上找不到有类似问题的人,所以我自己解决问题就更难了。如果有人对为什么会失败有任何想法或建议,那就太好了。谢谢!
编辑
我可以发送没有附件的常规电子邮件,但奇怪的是我可以发送空白 PDF 而没有任何错误。一旦我得到一个有效datauri
的,我就会收到这个错误。
解决方案
推荐阅读
- spring-cloud-dataflow - task-launcher-cloudfoundry 应用程序在多次启动任务后进入磁盘内存不足
- html - SQL 查询从数据库中删除因 URL 而异的 HTML 输入
- javascript - 如何在 Activiti Script Task 中获取和设置属性对象的属性值
- android - CardStackListener 不提供任何回调
- excel - 将字母添加到具有不同值的行中
- ios - tvOS - 由于playbackBufferEmpty 导致实时视频流停止并且永远不会恢复
- c# - 如何转换列表
数据数组到我可以用于位掩码的东西? - php - 如何在 docker 上同时运行多个项目
- node.js - node_redis(npm redis模块)是否支持redis集群模式或者我们必须使用ioredis?
- matlab - 使用 fplot 函数时如何矢量化?