За последние 24 часа нас посетили 17516 программистов и 1310 роботов. Сейчас ищут 787 программистов ...

отправка изображений

Тема в разделе "Работа с почтой", создана пользователем Panich, 20 авг 2012.

  1. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Есть форма,которая по мимо текстовых полей,ещё имеет и поля для загрузки файлов.
    Цель: всё это принять и отправить на почту.
    Есть:
    Код (Text):
    1. print_r($_FILES);
    2.                                 $picture = "";
    3.                                 $picture2 = "";
    4.                                 $picture3 = "";
    5.                                 if (!empty($_FILES['fileBlog1']['tmp_name']) && !empty($_FILES['fileBlog2']['tmp_name']) && !empty($_FILES['fileBlog3']['tmp_name']))                
    6.                                 {
    7.                                     $path = $_FILES['fileBlog1']['name'];
    8.                                     $path2 = $_FILES['fileBlog2']['name'];
    9.                                     $path3 = $_FILES['fileBlog3']['name'];
    10.                                     if (copy($_FILES['fileBlog1']['tmp_name'], $path))
    11.                                     {
    12.                                     $picture = $path;
    13.                                     }
    14.                                     if (copy($_FILES['fileBlog2']['tmp_name'], $path2))
    15.                                     {
    16.                                     $picture2 = $path2;
    17.                                     }
    18.                                     if (copy($_FILES['fileBlog3']['tmp_name'], $path3))
    19.                                     {
    20.                                     $picture3 = $path3;
    21.                                     }
    22.                                 }
    23.                                 $foto_size1 = $_FILES['fileBlog1']['size'];
    24.                                 $foto_size2 = $_FILES['fileBlog2']['size'];
    25.                                 $foto_size3 = $_FILES['fileBlog3']['size'];
    26.                                 if ($foto_size1 > 5*1024*1000 && $foto_size2 > 5*1024*1000 && $foto_size3 > 5*1024*1000)
    27.                                 {
    28.                                 exit ("<p>Размер изображения превысил лимит в 5 Мб.</p>
    29.                                 <a href='index.php'>вернуться к форме.</a>");
    30.                                 }          
    31.                                 else
    32.                                 {
    33.                                     if (!empty($_FILES['fileBlog1']['tmp_name']))
    34.                                     {
    35.                                     $imageinfo1 = getimagesize($_FILES['fileBlog1']['tmp_name']);
    36.                                     }
    37.                                     if (!empty($_FILES['fileBlog2']['tmp_name']))
    38.                                     {
    39.                                     $imageinfo2 = getimagesize($_FILES['fileBlog2']['tmp_name']);
    40.                                     }
    41.                                     if (!empty($_FILES['fileBlog3']['tmp_name']))
    42.                                     {
    43.                                     $imageinfo3 = getimagesize($_FILES['fileBlog3']['tmp_name']);
    44.                                     }
    45.                                     if($imageinfo1['mime'] != 'image/gif' && $imageinfo1['mime'] != 'image/jpeg' && $imageinfo1['mime'] != 'image/jpg' && $imageinfo1['mime'] != 'image/png' && $imageinfo2['mime'] != 'image/gif' && $imageinfo2['mime'] != 'image/jpeg' && $imageinfo2['mime'] != 'image/jpg' && $imageinfo2['mime'] != 'image/png' && $imageinfo3['mime'] != 'image/gif' && $imageinfo3['mime'] != 'image/jpeg' && $imageinfo3['mime'] != 'image/jpg' && $imageinfo3['mime'] != 'image/png')
    46.                                     {
    47.                                     exit ("<p>Изображение должно быть в формате <strong>JPG,GIF или PNG</strong></p>
    48.                                     <a href='index.php'>вернуться к форме.</a>");
    49.                                     }
    50.                                     else
    51.                                     {
    52.                                         $thm = "Письмо с твоего сайта!Заявка на размещение новой темы блога.";
    53.                                         $msg = "<p><font face=Verdana, Arial, Helvetica, sans-serif size=+1 color=#003366>Информация о клиенте:</font></p>
    54.                                         <p><font face=Verdana, Arial, Helvetica, sans-serif size=-1 color=#333333>
    55.                                         1. Заголовок: <strong>$title</strong>
    56.                                         2. Автор: <strong>$autor</strong>
    57.                                         3. Основной текст: <strong>$text</strong>";
    58.                                         $mail_to = "panich07@list.ru";
    59.                                         // Отправляем почтовое сообщение
    60.                                         if(empty($picture))
    61.                                         {
    62.                                         mail($mail_to, $thm, $msg);
    63.                                         }
    64.                                         else
    65.                                         {
    66.                                             send_mail($mail_to, $thm, $msg, $picture, $picture2, $picture3);
    67.                                             // Вспомогательная функция для отправки почтового сообщения с вложением
    68.                                             function send_mail($to, $thm, $html, $path, $path2)
    69.                                             {
    70.                                                 $fp = fopen($path,"r");
    71.                                                 if (!$fp)
    72.                                                 {
    73.                                                 print "Файл $path не может быть прочитан";
    74.                                                 exit();
    75.                                                 }
    76.                                                 $file = fread($fp, filesize($path));
    77.                                                 fclose($fp);
    78.                                                
    79.                                                 $fp2 = fopen($path2,"r");
    80.                                                 if (!$fp2)
    81.                                                 {
    82.                                                 print "Файл $path2 не может быть прочитан";
    83.                                                 exit();
    84.                                                 }
    85.                                                 $file2 = fread($fp2, filesize($path2));
    86.                                                 fclose($fp2);
    87.                                                
    88.                                                 $fp3 = fopen($path3,"r");
    89.                                                 if (!$fp3)
    90.                                                 {
    91.                                                 print "Файл $path3 не может быть прочитан";
    92.                                                 exit();
    93.                                                 }
    94.                                                 $file3 = fread($fp3, filesize($path3));
    95.                                                 fclose($fp3);
    96.                                                  
    97.                                                 $boundary = "--".md5(uniqid(time())); // генерируем разделитель
    98.                                                 $headers .= "MIME-Version: 1.0\n";
    99.                                                 $headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
    100.                                                 $multipart .= "--$boundary\n";
    101.                                                 $kod = 'UTF-8';
    102.                                                 $multipart .= "Content-Type: text/html; charset=$kod\n";
    103.                                                 $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
    104.                                                 $multipart .= "$html\n\n";
    105.                                                 $message_part = "--$boundary\n";
    106.                                                 $message_part .= "Content-Type: application/octet-stream\n";
    107.                                                 $message_part .= "Content-Transfer-Encoding: base64\n";
    108.                                                 $message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n";
    109.                                                 $message_part .= chunk_split(base64_encode($file))."\n";
    110.                                                 $message_part .= "--$boundary\n";
    111.                                                 $message_part .= "Content-Type: application/octet-stream\n";
    112.                                                 $message_part .= "Content-Transfer-Encoding: base64\n";
    113.                                                 $message_part .= "Content-Disposition: attachment; filename = \"".$path2."\"\n\n";
    114.                                                 $message_part .= chunk_split(base64_encode($file2))."\n";
    115.                                                 $message_part .= "--$boundary\n";
    116.                                                 $message_part .= "Content-Type: application/octet-stream\n";
    117.                                                 $message_part .= "Content-Transfer-Encoding: base64\n";
    118.                                                 $message_part .= "Content-Disposition: attachment; filename = \"".$path3."\"\n\n";
    119.                                                 $message_part .= chunk_split(base64_encode($file3))."\n";
    120.                                                
    121.                                                 $multipart .= $message_part."--$boundary--\n";
    122.                                                 if(!mail($to, $thm, $multipart, $headers))
    123.                                                 {
    124.                                                 echo "К сожалению, письмо не отправлено";
    125.                                                 exit();
    126.                                                 }
    127.                                             }
    128.                                         }
    129.                                     }
    130.                                 }
    Всё это дело я обкатываю на Денвере.
    Так вот,когда открываю письмо в tmp,то вижу(про изображения и слова нет):
    Код (Text):
    1. <p><font face=Verdana, Arial, Helvetica, sans-serif size=+1 color=#003366>п≤п╫я└п╬я─п╪п╟я├п╦я▐ п╬ п╨п╩п╦п╣п╫я┌п╣:</font></p>
    2. <p><font face=Verdana, Arial, Helvetica, sans-serif size=-1 color=#333333>
    3. 1. п≈п╟пЁп╬п╩п╬п╡п╬п╨: <strong>привет</strong>
    4. 2. п░п╡я┌п╬я─: <strong>привет</strong>
    5. 3. п·я│п╫п╬п╡п╫п╬п╧ я┌п╣п╨я│я┌: <strong>привет</strong>
    А сам браузер при отправке выдаёт:
    Код (Text):
    1. Array ( [fileBlog1] => Array ( [name] => gal2.jpg [type] => image/jpeg [tmp_name] => Z:\tmp\phpBF.tmp [error] => 0 [size] => 4213 ) [fileBlog2] => Array ( [name] => gal3.jpg [type] => image/jpeg [tmp_name] => Z:\tmp\phpC0.tmp [error] => 0 [size] => 3308 ) [fileBlog3] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) )
    Я,конечно,понимаю,что длинный код и нет желания копаться в нём, но помогите, пожалуйста, разобраться в причине...
    Заранее благодарен!
     
  2. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    1. print_r($_FILES); - это то что выдает вам в браузер скрипт после отправки
    2. нужную кодировку в заголовке письма отдайте и все
     
  3. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Так он даже без кодировки про файлы и слова не говорит!
    Сделал всё как Вы сказали:
    Код (Text):
    1. X-Sendmail-Cmdline: sendmail.pl -t -i
    2. <p><font face=Verdana, Arial, Helvetica, sans-serif size=-1 color=#333333>
    3. 1. Заголовок: <strong>123123</strong>
    4. 2. Автор: <strong>1231312</strong>
    5. 3. Основной текст: <strong>12313123123</strong>
    А где же картинки?

    П.С.В ссылке,что у Вас под ответом нет упоминаний про изображения.Только форма с обычными текстовыми полями,чекбоксами и т.д.
     
  4. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    у тебя срабатывает вот это:

    Код (PHP):
    1. if(empty($picture)) 
    2.                               {
    3.                               mail($mail_to, $thm, $msg);
    4.                               } 
    вот и я думаю...где они тут...

    Обязательно добавлю, спасибо за мысль!
     
  5. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Так!Во всём разобрался и всё понял-спасибо,что навели на мысль...
    Только вот вопрос ещё-когда отправляется письмо с сайта,то она записывается на сервер и тут выплывает два развития событий:
    1. Допустим я прочитал письмо и мне ничего не понравилось-как мне удалить их с сервака,что бы не загружать его?
    2. Я прочитал письмо,откорректировал его и расположил у себя на сайте присланную информацию через форму в админке-получится у меня уже два изображения одинаковых.Как мне удалить первое-загруженное при отправке письма пользователем?