发送邮件大附件- ZF2


Sending mail large attachment - ZF2

我刚刚遇到了一个问题,当从服务器发送附件大于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);
    }

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

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

编辑:更改Mime'Mime::ENCODING_BASE64可发送邮件,但PDF文件已损坏。

您是否尝试过使用Octetstream类型

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

问题似乎出在mime编码上。

所有选项:

  • Zend_Mime::ENCODING_7BIT: '7bit' ->文件损坏
  • Zend_Mime:: ENCODING_8BIT:"8 bit";-->文件损坏
  • Zend_Mime::ENCODING_QUOTEDPRINTABLE: ' quotes -printable' ->已损坏文件
  • Zend_Mime::ENCODING_BASE64: 'base64' -> file not send

不起作用。使用PHPMailer开发了一个解决方案。div。