【问题标题】:Sending mail large attachment - ZF2发送邮件大附件 - ZF2
【发布时间】:2017-03-23 00:38:49
【问题描述】:

当我从服务器发送附件大于约 2.5Mb 的邮件时,我遇到了一个问题。发送带有较小附件的电子邮件是可行的,但一旦达到大约 2 或 2.5Mb 的临界大小,就不再发送邮件了。

无论大小如何,PDF 文件和合并的目标 PDF 都可以毫无问题地创建。但只有较小的 PDF 文件通过邮件发送。当附件太大时,甚至不会发送空邮件。

流程如下:

1) php 脚本创建了几个 PDF 文件。

2) 这些文件通过 gs 合并

    $finCmd = 'gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile='.$pathDest.$pdfFilename.' input1.pdf input2.pdf input3.pdf';

    // Create PDF
    $execResult = exec($finCmd);

3) 电子邮件正文已创建

protected function setBodyHtmlpart($content, $pdfFilepath = null, $pdfFilename = null) {

        $content="<p><span style='font-size:10.0pt;font-family:\"Arial\",\"sans-serif\";color:black;'>".$content.'</span></p>';

        $html = new MimePart($content.$this->getSignature());
        $html->type = "text/html";

        $body = new MimeMessage();

        if ($pdfFilename != '') {
            $pdfAttach = new MimePart(file_get_contents($pdfFilepath.$pdfFilename));
            $pdfAttach->type = 'application/pdf';
            $pdfAttach->filename = $pdfFilename;
            $pdfAttach->encoding = \Zend\Mime\Mime::ENCODING_BASE64;
            $pdfAttach->disposition = \Zend\Mime\Mime::DISPOSITION_ATTACHMENT;
            $body->setParts(array($html, $pdfAttach));
        } else {
            $body->setParts(array($html));
        }
        return $body;
    }

4) 发送电子邮件:

protected function send($fromAddress, $fromName, $toAddress, $toName, $subject, $bodyParts)
    {
        // setup SMTP options
        $options = new SmtpOptions(array(
            'name'              => 'XServer',
            'host'              => 'xServer',
            'port'              => 25,
            'connection_class'  => 'plain',
            'connection_config' => array(
                'username' => 'Xusername',
                'password' => 'Xpassword',
            ),
        ));

        $mail = new Message();
        $mail->setBody($bodyParts);
        $mail->setFrom($fromAddress, $fromName);
        $mail->setTo($toAddress, $toName);
        $mail->setSubject($subject);

        $transport = new SmtpTransport($options);
        $transport->send($mail);
    }

欢迎任何提示,因为我完全迷路了。

我认为可能存在竞争问题:exec 未完成,但脚本已尝试发送邮件并取消。但我至少会收到一封空邮件。

编辑: 更改然后 Mime\Mime::ENCODING_BASE64 传递邮件,但 PDF 文件已损坏。

【问题讨论】:

  • 你确定生成的 PDF 真的也很好吗?您是否生成并打开了一个?
  • 是的。我打开了生成的文件,它们是正确的。而不是那些解码不正确的,请参阅我的答案。

标签: php email zend-framework2 email-attachments


【解决方案1】:

看来,问题在于 mime 编码。

所有选项:

  • Zend_Mime::ENCODING_7BIT: '7bit' --> 文件损坏
  • Zend_Mime::ENCODING_8BIT: '8bit'; --> 文件损坏
  • Zend_Mime::ENCODING_QUOTEDPRINTABLE: 'quoted-printable' --> 损坏 文件
  • Zend_Mime::ENCODING_BASE64: 'base64' --> 文件未发送

没用。 使用 PHPMailer 开发了一个解决方案。 解决了。​​

【讨论】:

    【解决方案2】:

    您是否尝试过使用类型 Octetstream

    $pdfAttach->type      = Mime::TYPE_OCTETSTREAM;
    $pdfAttach->encoding   = Mime::ENCODING_BASE64;
    

    【讨论】:

    • 你的解决方案其实是对的。感谢您的提示。但我恢复了一个完全不同的问题:生成文件时数据库连接超时。这个问题当然不能通过我的描述来追踪,完全是菜鸟问题。感谢您的提示!
    猜你喜欢
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多