странное поведение вложения почты php - PullRequest
0 голосов
/ 30 сентября 2010

Мне нужна помощь здесь с действительно странной ситуацией. Я создал форму веб-почты для отправки писем с несколькими вложениями, вчера она работала «из коробки», но сегодня отправляет только 1 файл в качестве вложения, а не несколько. О_О

Я возвращаю свой SVN к более старой версии, и проблема все еще сохраняется, вы понимаете? это действительно странно ... как рабочие вещи тормозят изо дня в день, я думаю, что проблема должна быть в SMTP-сервере или что-то в этом роде. Помогите пожалуйста!

Код:

        $semi_rand = md5(time()); 
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";


            $attachments = TRUE;
        $body = "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" .
        $body . "\n\n";
        $body .= "--{$mime_boundary}\n";
        $attach = array();
        for($i=0; $i<count($_FILES['file']['name']);$i++)
        {
            $tmp_name = $_FILES['file']['tmp_name'][$i];
            $type = $_FILES['file']['type'][$i];
            $name = $_FILES['file']['name'][$i];
            $size = $_FILES['file']['size'][$i];

            if (file_exists($tmp_name)){
                $kb = $size/1024;
                $kbSize = round($kb*100)/100;

                if(is_uploaded_file($tmp_name)){
                    $file = fopen($tmp_name,'rb');
                    $fdata = fread($file,filesize($tmp_name)); //stream file to var and send it in headers
                    fclose($file);
                    $fdata = chunk_split(base64_encode($fdata));
                    $body .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$name\"\n" . 
                        "Content-Disposition: attachment;\n" . " filename=\"$name\"\n" . 
                        "Content-Transfer-Encoding: base64\n\n" . $fdata . "\n\n";
                    $body .= "--{$mime_boundary}-\n";
                }
            }       
        }
        $sent = myMailer::sendAttached($from,$to,$subject,$body,$mime_boundary,$multi);

Класс MyMailer, метод sendAttached:

    public static function sendAttached($from,$to,$subject,$body,$mime,$multi=FALSE)
{

    $headers = 'From: Website <'.$from.'>'. "\r\n".
    'Reply-To: '.$from. "\r\n".
    "MIME-Version: 1.0\r\n" .
    "Content-Type: multipart/mixed;\r\n" .
    " boundary=\"{$mime}\"";

    if($multi == TRUE && is_array($to)){
        foreach($to as $item)
        {
            mail(trim($item),$subject,$body,$headers);
        }
        return TRUE;
    }else{
        return mail($to,$subject,$body,$headers);
    }
}

1 Ответ

0 голосов
/ 01 октября 2010

Возможно, в какой-то момент вы переместили следующее за цикл for:

$semi_rand = md5(time()); 
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

Я никогда не пытался создать сложное многочастное сообщение с нуля, как это (я всегда использую существующую библиотеку, такую ​​как SwiftMailer или Zend_Mail), но разве каждый файл не должен быть отдельной частью и, следовательно, иметь свои границы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...