Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2015, 06:25   #1
Bender1000
Пользователь
 
Регистрация: 20.05.2013
Сообщений: 37
Вопрос Декодировать прикреплённые к письму файлы

Здравствуйте! Отправляю письмо после автоматического заполнения формы. Нужно прикрепить к письму файл. Файл, насколько я понимаю, прикрепляется, но в письме вместо вложенного файла приходит кошмарный код типа: 9UeXBlIC9DYXRhbG9nIAo+PiAKZW5kb2JqC jQgMCBvYmoK PDwgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGU gL0ltYWdlIC9XaWR0aCAxMjQwIC9IZWlnaH QgMTc1 NCAKL0JpdHNQZXJDb21wb25lbnQgOCAvQ29 sb3JTc - и так стотыщ строчек.

Подскажите, пожалуйста, что можно сделать, чтобы файл приходил в виде файла, а не в виде этого кода.

PHP код:

function smtpmail($to$subject$content) {
$filename='files/perechen.pdf';
$f         fopen($filename,"rb");
$un        strtoupper(uniqid(time()));
$head     .= "To: $to";
$head     .= "Subject: $subject\n";
$head     .= "X-Mailer: PHPMail Tool\n";
$head     .= "Reply-To: polis-ot-klescha@mail.ru\n";
$head     .= "Mime-Version: 1.0\n";
$head     .= "Content-Type:multipart/mixed;";
$head     .= "boundary=\"----------".$un."\"\n\n";
$att       "------------".$un."\nContent-Type:text/html;\n";
$att      .= "Content-Transfer-Encoding: 8bit\n\nMessage:$content\r\n;";
$att      .= "------------".$un."\n";
$att      .= "Content-Type: application/octet-stream;";
$att      .= "name=\"".basename($filename)."\"\n";
$att      .= "Content-Transfer-Encoding:base64\n";
$att      .= "Content-Disposition:attachment;";
$att      .= "filename=\"".basename($filename)."\"\n\n";
$att      .= chunk_split(base64_encode(fread($f,filesize($filename))))."\n";
 
mail($to$subject$att$head); 
10000 часов програмирования - https://vk.com/tth.ikarev
Bender1000 вне форума Ответить с цитированием
Старый 31.03.2015, 10:39   #2
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

index.html

Код:
<HTML> 
<HEAD> 
<TITLE>Отправка сообщения с вложением</TITLE> 
</HEAD> 
<BODY> 
<H3> <center><font color="#1E90FF">Отправка сообщения с вложением</font></H3> 
<center> 
<table width="1" border="0"> 
<form action="simple_mail.php" enctype="multipart/form-data" method="post"> 
<tr><td width="50%">To:</td><td align="right"><input type="text" name="mail_to" maxlength="32"></td></tr> 
<tr><td width="50%">Subject:</td><td align="right"><input type="text" name="mail_subject" maxlength="64"></td></tr> 
<tr><td colspan="2">Сообщение:<br><textarea cols="50" rows="8" name="mail_msg"></textarea></td> 
<tr><td width="50%">Photo:</td><td align="right"><input type="file" name="mail_file" maxlength="64"></td></tr> 
</tr><tr><td colspan="2"><input type="submit" value="Отправить"></td></tr> 
</form> 
</table> 
</center> 
</BODY> 
</HTML>

Код:
<?php 
  if(empty($_POST['mail_to'])) exit("Введите адрес получателя"); 
  // проверяем правильности заполнения с помощью регулярного выражения 
  if (!preg_match("/^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}$/i", $_POST['mail_to'])) exit("Введите адрес в виде somebody@server.com"); 
  $picture = ""; 
  // Если поле выбора вложения не пустое - закачиваем его на сервер 
  if (!empty($_FILES['mail_file']['tmp_name'])) 
  { 
    // Закачиваем файл 
    $path = $_FILES['mail_file']['name']; 
    if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $path; 
  } 
  $thm = $_POST['mail_subject'];
  $msg = $_POST['mail_msg'];
  $mail_to = $_POST['mail_to'];
  // Отправляем почтовое сообщение 
  if(empty($picture)) mail($mail_to, $thm, $msg); 
  else send_mail($mail_to, $thm, $msg, $picture); 
  // Вспомогательная функция для отправки почтового сообщения с вложением (Trianon)
  function send_mail($mail_to, $thema, $html, $path)   
  { if ($path) {  
    $fp = fopen($path,"rb");   
    if (!$fp)   
    { print "Cannot open file";   
      exit();   
    }   
    $file = fread($fp, filesize($path));   
    fclose($fp);   
    }  
    $name = "file.ext"; // в этой переменной надо сформировать имя файла (без всякого пути)  
    $EOL = "\r\n"; // ограничитель строк, некоторые почтовые сервера требуют \n - подобрать опытным путём
    $boundary     = "--".md5(uniqid(time()));  // любая строка, которой не будет ниже в потоке данных.  
    $headers    = "MIME-Version: 1.0;$EOL";   
    $headers   .= "Content-Type: multipart/mixed; boundary=\"$boundary\"$EOL";  
    $headers   .= "From: address@server.com";  
      
    $multipart  = "--$boundary$EOL";   
    $multipart .= "Content-Type: text/html; charset=windows-1251$EOL";   
    $multipart .= "Content-Transfer-Encoding: base64$EOL";   
    $multipart .= $EOL; // раздел между заголовками и телом html-части 
    $multipart .= chunk_split(base64_encode($html));   

    $multipart .=  "$EOL--$boundary$EOL";   
    $multipart .= "Content-Type: application/octet-stream; name=\"$name\"$EOL";   
    $multipart .= "Content-Transfer-Encoding: base64$EOL";   
    $multipart .= "Content-Disposition: attachment; filename=\"$name\"$EOL";   
    $multipart .= $EOL; // раздел между заголовками и телом прикрепленного файла 
    $multipart .= chunk_split(base64_encode($file));   

    $multipart .= "$EOL--$boundary--$EOL";   
      
        if(!mail($mail_to, $thema, $multipart, $headers))   
         {return False;           //если не письмо не отправлено
      }  
    else { //// если письмо отправлено
    return True;  
    }  
  exit;  
  }
?>
ну а вообще лучше библиотеку phpmailer использовать
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

Последний раз редактировалось Stanislav; 31.03.2015 в 10:43.
Stanislav вне форума Ответить с цитированием
Старый 31.03.2015, 13:21   #3
Bender1000
Пользователь
 
Регистрация: 20.05.2013
Сообщений: 37
По умолчанию

Спасибо! Очень помогло! )
10000 часов програмирования - https://vk.com/tth.ikarev
Bender1000 вне форума Ответить с цитированием
Старый 31.03.2015, 13:22   #4
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Сообщение от Bender1000 Посмотреть сообщение
Спасибо! Очень помогло! )
Не за что. Обращайтесь еще
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическое вложение файла к письму в зависимости от даты (outlook) Kinghandles Microsoft Office Excel 3 17.11.2013 12:46
Как прикрепить к письму файл. Zis67 Общие вопросы Delphi 3 11.07.2012 20:10
Прикрепленый файл к письму KoBRaAndrey Работа с сетью в Delphi 9 09.02.2010 20:52
Прикрепить файл к письму -=L.Morgan=- Работа с сетью в Delphi 2 04.05.2009 19:33
Как прикрепить файл к письму? micaell Работа с сетью в Delphi 5 17.03.2009 15:04