Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有问题附加数据到电子邮件(PHP),想发送数据高达20 MB,任何猜测?_Php_Email_Pdf_Base64_Attachment - Fatal编程技术网

有问题附加数据到电子邮件(PHP),想发送数据高达20 MB,任何猜测?

有问题附加数据到电子邮件(PHP),想发送数据高达20 MB,任何猜测?,php,email,pdf,base64,attachment,Php,Email,Pdf,Base64,Attachment,面临的问题:尝试发送电子邮件使用PHP多达20 MB的数据作为电子邮件附件所有文件都是.pdf文件。我可以成功地发送高达5 MB的电子邮件,但如果尝试发送超过5 MB的数据,我的收件箱中从未收到电子邮件,PHP不会显示任何错误。我在许多论坛上搜索过这个问题,我尝试了他们提供的所有解决方案。类似于php.ini文件中的设置 php.ini设置: 内存限制=256M 最大执行时间=60 最大文件上传量=25 立柱最大尺寸=25M 上载\u最大\u文件大小=10M 我使用的代码: $t

面临的问题:尝试发送电子邮件使用PHP多达20 MB的数据作为电子邮件附件所有文件都是.pdf文件。我可以成功地发送高达5 MB的电子邮件,但如果尝试发送超过5 MB的数据,我的收件箱中从未收到电子邮件,PHP不会显示任何错误。我在许多论坛上搜索过这个问题,我尝试了他们提供的所有解决方案。类似于php.ini文件中的设置

php.ini设置:

内存限制=256M

最大执行时间=60

最大文件上传量=25

立柱最大尺寸=25M

上载\u最大\u文件大小=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>";
        }
$to=$settings->factoring\u电子邮件;
$from=ucfirst($settings->company_name)。“”;
$subject=ucfirst($settings->company\u name)。“发票清单”。$post['inv\u date'];
$message=“请参阅附件。”;
$headers=“From:$From”;
//边界
$semi_rand=md5(time());
$mime_boundary=“==Multipart_boundary_x{$semi_rand}x”;
//附件的标题
$headers.=“\n时间版本:1.0\n”。“内容类型:多部分/混合;\n”。“边界=\”{$mime\u boundary}\”;
//多部分边界
$message=“这是MIME格式的多部分消息。\n\n”。“{$mime\U边界}\n”。“内容类型:文本/普通;字符集=\”iso-8859-1\“\n”。“内容传输编码:7bit\n\n”$消息“\n\n”;
$message.=“--{$mime\u boundary}\n”;
//准备附件
$count=计数($files);

对于($x=0;$x如果您成功发送较小的邮件,我敢打赌这很可能是您的邮件服务配置有问题。您的邮件路径上有人不允许“大”通过发送邮件。检查您的回复地址,查看是否有任何反弹。

您从未收到收件箱中的电子邮件,因为电子邮件从未在途中发送。SMTP服务器、联系的
mail()
函数或产生的
mail()
函数都会拒绝该电子邮件


这两种情况中的哪一种取决于您的。

这就是您的
PHP.ini
文件的设置吗?打印
邮件后的两条消息中的哪一条?@fred:是的,这些值在PHP.ini中file@Oswald当前位置:邮件无法发送!这可能是一个愚蠢的问题,但您的表单是什么样子的,或者是什么你一开始就在使用它吗?如果是的话,发布它。加上“PaulProgrammer”可能有点道理。看看你能找到什么。反弹不应该回来,因为对
mail()的调用
失败,这意味着邮件无法送达。我看到了。因此,配置在入口点上--本地sendmail或exim或其他任何东西。无论如何,10-20MB的附件是不好的形式。认真地建议发送到收件箱的链接,而不是电子邮件附件。