Проблема с отправкой почты

posderfet

Новичок
Проблема собственно вот в чем, есть код, который перебирает файлы из мультизагрузочного инпута, записывает их на сервер при этом создавая zip архив из этих файлов. Далее отправляется письмо на почту с прикрепленным архивом, точнее не то чтобы отправляется, а еще точнее оно приходит, и там виден прикрепленный архив, но весит он 1кб и естественно не открывается, а на сервере при этом лежит нормальный архив с таким же именем. Битый час уже голову ломаю, не могу понять в чем проблема. Может подскажет кто в чем моя ошибка.
PHP:
if(isset($_POST)){

    $name = $_POST['name'];
    $phone = $_POST['phone'];
    $desc = $_POST['mess'];
    $file_folder = "../upload/";
    $email = "[email protected]";
    $boundary = "--".md5(uniqid(time()));

if(isset($_FILES)){

    $zip = new ZipArchive();
    $zip_name = $file_folder.$name.time().".zip";
    if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE) {
        echo "архив не создался чёт(";
    }

    $delete = array();

    foreach( $_FILES['file'] as $key => $all ){
        foreach( $all as $i => $val ){
            $new[$i][$key] = $val;
        }
    }

    foreach ($new as $file) {
        foreach ($file as $key => $value) {
            $tmp_name = $file["tmp_name"];
            $namef = $file["name"];
            move_uploaded_file($tmp_name, "../upload/$namef");
            $zip->addFile($file_folder.$namef);
        }
    }

    $from = "[email protected]";
    $to = "[email protected]";
    $subj = "Письмо с сайта xxx от $name";
    $text = "<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">
            <p><b>Имя:</b> $name</p><br>
            <p><b>Телефон:</b> $phone</p><br>
            <p style=\"width: 500px; height: auto;\"><b>Текст:</b> $desc</p><br>";
    $filename = $zip_name;

    function xmail( $from, $to, $subj, $text, $filename) {
        $f        = fopen($filename,"rb");
        $un        = strtoupper(uniqid(time()));
        $head      = "From: $from\n";
        $head    .= "To: $to\n";
        $head    .= "Subject: $subj\n";
        $head    .= "X-Mailer: PHPMail Tool\n";
        $head    .= "Reply-To: $from\n";
        $head    .= "Mime-Version: 1.0\n";
        $head    .= "Content-Type:multipart/mixed;";
        $head    .= "boundary=\"----------".$un."\"\n\n";
        $zag      = "------------".$un."\nContent-Type:text/html;\n";
        $zag      .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
        $zag      .= "------------".$un."\n";
        $zag      .= "Content-Type: application/zip";
        $zag      .= "name=\"".basename($filename)."\"\n";
        $zag      .= "Content-Transfer-Encoding:base64\n";
        $zag      .= "Content-Disposition:attachment;";
        $zag      .= "filename=\"".basename($filename)."\"\n\n";
        $zag      .= chunk_split(base64_encode(fread($f,filesize($filename))))."\n";

        return @mail("$to", "$subj", $zag, $head);
    }
    xmail( $from, $to, $subj, $text, $filename);

}


}
 

AnrDaemon

Продвинутый новичок
Простите, но... Если вы отправляете файл и... всё?... то зафигом страдать таким сексом?
Зачем создавать miltipart/mixed, если у вас всего одна часть?

P.S.
Про то, что вы RFC не потрудились прочитать, я вообще молчу. В стандарте английским языком написано - строки в заголовке оканчиваются CRLF.

P.P.S.
А изобретение велосипедов - вообще отдельная статья. imap_mail_compose для кого придумали? Ну или для совсем ущербных случаев - PHPMailer.
 

Breeze

goshogun
Команда форума
Партнер клуба
откуда ты этот xmail откопал, а? ему уже лет 10, если не больше
 

riff

Новичок
Я, так, одним глазком посмотрел разницу между твоим кодом и старым, запылившемся, но работавшем моим (ну как моим, тем же самым скопированным), разница в двух строках:
$zag .= "Content-Type: application/octet-stream;";
вместо
$zag .= "Content-Type: application/zip";

и
$zag .= "------------{$un}\n";
после
$zag .= chunk_split(...)

Больше ничего сказать о проблеме не могу, кроме как подумать о PHPMailer.

про CRLF я не знаю, всё работало так же как у тебя.
 

posderfet

Новичок
Да, переделал на PHPMailer, но проблема была не в коде отправки на мыло, а в том что я забыл закрыть zip архив ($zip->close()), по этому он и отсылался в непригодном виде.
 
Сверху