首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >发送邮件大附件- ZF2

发送邮件大附件- ZF2
EN

Stack Overflow用户
提问于 2016-11-09 08:53:55
回答 2查看 307关注 0票数 1

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

PDF文件和合并的目标PDF的创建没有问题,无论大小。但是只有较小的PDF文件是通过邮件发送的。当附件太大时,即使是空邮件也不会发送。

这一过程如下:

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

2)这些文件通过gs合并

代码语言:javascript
运行
复制
    $finCmd = 'gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile='.$pathDest.$pdfFilename.' input1.pdf input2.pdf input3.pdf';

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

3)创建电子邮件主体

代码语言:javascript
运行
复制
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)发送电子邮件时:

代码语言:javascript
运行
复制
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文件已损坏。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-09 15:16:31

您试过使用Octetstream类型吗?

代码语言:javascript
运行
复制
$pdfAttach->type      = Mime::TYPE_OCTETSTREAM;
$pdfAttach->encoding   = Mime::ENCODING_BASE64;
票数 0
EN

Stack Overflow用户

发布于 2016-11-09 13:04:29

看起来,问题是mime编码。

所有备选方案:

  • Zend_Mime::ENCODING_7BIT:'7bit‘-->损坏的文件
  • Zend_Mime::ENCODING_8BIT:‘8位’;--损坏的文件
  • Zend_Mime::ENCODING_QUOTEDPRINTABLE:‘引号-可打印’->损坏的文件
  • Zend_Mime::ENCODING_BASE64:'base64‘->文件不发送

不起作用。用PHPMailer开发了一种解决方案。已经解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40502965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档