首页 > 解决方案 > 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的,我就会收到这个错误。

标签: javascriptjspdfnodemailer

解决方案


推荐阅读