2016-11-09 8 views
1

添付ファイルが2.5Mbを超えるメールをサーバーから送信すると、問題が発生しました。より小さい添付ファイルでメールを送信することはできますが、クリティカルサイズが約2〜2.5Mbに達するとすぐにメールは送信されません。メールの添付ファイルが大きい - ZF2

PDFファイルとマージされたターゲットPDFは、サイズに関係なく問題なく作成されます。しかし、小さいPDFファイルだけがメールで送信されます。添付ファイルが大きすぎると、空のメールも送信されません。

プロセスは、以下である:

1)PHPのスクリプトは、複数のPDFファイルを作成します。

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); 
    } 

任意のヒント:

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; 
    } 
を作成している)を介して、マージされたメールはして送信されます私は完全に失われているので、歓迎されています。

私は競争上の問題があるかもしれないと思った:execは完了していないが、スクリプトはすでにメールを送信して取り消そうとしている。しかし、少なくとも私は空の電子メールを受け取るよりも。

編集: Mime \ Mime :: ENCODING_BASE64を変更すると、メールが配信されますが、PDFファイルが破損しています。

+0

を使用してみましたが、あなたは、生成されたPDFがあまりにも実際に罰金ですか? 1つを生成してオープンしましたか? – Andrew

+0

はい。私は、生成されたファイルを開いて、彼らは正しいと思った。間違ったデコードをした人の代わりに、私の答えを見てください。 –

答えて

0

あなたがタイプOctetstream

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

あなたの解決策は実際には正しいです。ヒントをありがとう。 しかし、私は全く異なる問題を回復しました。ファイルの生成中にデータベース接続がタイムアウトしました。もちろん、この問題は私の説明とnoobの問題では追跡できません。あなたのヒントありがとう! –

0

問題はMIMEエンコードのようです。

すべてのオプション:

  • するZend_Mime :: ENCODING_7BIT: '7ビット' - >破損したファイル
  • するZend_Mime :: ENCODING_8BIT: '8ビット'; - >破損したファイル
  • するZend_Mime :: ENCODING_QUOTEDPRINTABLE: 'quoted-printableの' - > ファイル
  • するZend_Mime :: ENCODING_BASE64壊れ 'base64' の - >ファイル

動作しませんでしたが送信されていません。 PHPMailerでソリューションを開発しました。 解決済みです。

関連する問題