-1

直面している問題 : PHP を使用して最大 20 MB のデータを電子メールの添付ファイルとして送信しようとすると、すべてのファイルが .pdf ファイルになります。最大 5 MB のメールを正常に送信できますが、5 MB を超えるデータを送信しようとすると、受信トレイにメールが届かず、PHP でエラーが表示されません。この問題について多くのフォーラムで検索し、提供されたすべての解決策を試しました。php.ini ファイルの設定と同様です。

php.ini 設定:

メモリ制限 = 256M

最大実行時間 = 60

max_file_uploads = 25

post_max_size = 25M

upload_max_filesize = 10M

私が使用しているコード:

        $to = $settings->factoring_email; 
        $from = ucfirst($settings->company_name)."<".$settings->company_billing_email.">";

        $subject = ucfirst($settings->company_name).' Invoice Manifest '.$post['inv_date'];
        $message = "Please see attached documents.";
        $headers = "From: $from";

        // boundary
        $semi_rand = md5(time());
        $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
        // headers for attachment
        $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";
        // multipart boundary
        $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";
        $message .= "--{$mime_boundary}\n";

        // preparing attachments
        $count = count($files);
        for($x=0;$x<$count;$x++){
            if(stristr($files[$x],'manifest')) {
                $path = BASE_PATH.DS.'docs'.DS.'tmp'.DS.$files[$x];
                $name = $files[$x];
            }
            else {
                $path = BASE_PATH.DS.'docs'.DS.'load_info'.DS.$files[$x].'.pdf';
                $name = $files[$x].'.pdf';
            }

            if(file_exists($path)) {
                $file = fopen($path,"rb");
                $data = fread($file,filesize($path));
                fclose($file);
                $data = chunk_split(base64_encode($data));
                $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$name\"\n" .
                "Content-Disposition: attachment;\n" . " filename=\"$name\"\n" .
                "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
                $message .= "--{$mime_boundary}\n";

                unset($file, $data);
            }
        }
        // send

        $ok = mail($to, $subject, $message, $headers);

        if ($ok) {
            echo "<p>mail sent to $to!</p>";
        } else {
            echo "<p>mail could not be sent!</p>";
        }
4

2 に答える 2

2

小さいメールが正常に送信されている場合は、メールサービスの構成に問題がある可能性が高いと思います。あなたのメールルート上の誰かが「大きな」メッセージの通過を許可していません。返信先アドレスを確認して、バウンスが戻ってくるかどうかを確認します。

于 2013-03-21T18:23:21.567 に答える
0

電子メールは途中で送信されないため、受信トレイに電子メールを受信することはありません。電子メールは、関数が接続した SMTP サーバー、mail()または関数が生成したプログラムによって拒否されますmail()

これら 2 つのうちどちらが該当するかは、メール関連の PHP 構成によって異なります。

于 2013-03-21T22:13:52.010 に答える