Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Приложить к письму, несколько файлов(аттачей)
 
 автор: web777   (18.10.2008 в 12:24)   письмо автору
 
 

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

Ниже приведён мой код, он рабочий, всё отправляется нормально, единственное отправляется только один вложенный файл


<?php
  $type_text 
= ($type_text == 'TEXT' 'text/plain''text/html');
  
$charset   = ($charset == '' 'windows-1251'$charset);

  
$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";

  
$mes  "------------".$un."\nContent-Type:$type_text;charset=$charset\n";
  
$mes .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
  
$mes .= "------------".$un."\n";


$fname basename($att_path_full.$filename);
$data file_get_contents($att_path_full.$filename);
$mes .= "Content-Type: application/octet-stream;\r\n" .
"name=\"$fname\"\r\n" .
"Content-Transfer-Encoding: base64\r\n" .
"Content-ID: <$fname>\r\n" .
"Content-Disposition: attachment; " .
"filename=".$fname."\r\n" .
"\n".chunk_splitbase64_encode($data), 68"\n");


 if(!@
mail($to$subj$mes$head)){
   return 
0;
 }else{
   return 
1;
 }
?>


решил дополнить ещё одним кодом , думал что получится приложить второй файл


<?php
$fname2 
basename($att_path_full.$filename2);
$data2 file_get_contents($att_path_full.$filename2);
$mes .= "Content-Type: application/octet-stream;\r\n" .
"name=\"$fname2\"\r\n" .
"Content-Transfer-Encoding: base64\r\n" .
"Content-ID: <$fname2>\r\n" .
"Content-Disposition: attachment; " .
"filename=".$fname2."\r\n" .
"\n".chunk_splitbase64_encode($data2), 68"\n");
?>


но ничего не вышло, присылается только один файл.

Подскажите что не так делаю, и как сделать чтобы отправлялось больше одного файла?

  Ответить  
 
 автор: Trianon   (18.10.2008 в 12:34)   письмо автору
 
   для: web777   (18.10.2008 в 12:24)
 

Код нерабочий изначально. Заголовок строится с нарушениями. В частности поле Content-type.

  Ответить  
 
 автор: web777   (18.10.2008 в 12:48)   письмо автору
 
   для: Trianon   (18.10.2008 в 12:34)
 

на самом деле это отрывок функции, я не стал всё приводить, думал что всё будет понятно, функция задаётся таким образом


<?php
function att_subscribe($from,$to,$subj,$text,$att_path_full='',$filestr='',$type_text '',$charset ''){
  
тут выше приводнённый код
}

а используется так

  
if( att_subscribe($email_site,$row['email'],$subscribe_subject,$subscribe_message,$att_path_full,$row['file'],$sent_format,$sent_format,$sent_kodir) ){
    
$status '<font color="green">Отправлено...</font>';
  }else{
    
$status '<font color="#510000">Не отправлено...</font>';
  }
?>



также в место тех двух блоков для загрузки фото, я написал такой код


<?php
 
if($filestr != ''){

   
$files explode(';',$filestr);

    foreach (
$files as $v) {
  
      
$fname basename($att_path_full.$v);
      
$data file_get_contents($att_path_full.$v);
      
$mes .= "Content-Type: application/octet-stream;\r\n" .
      
"name=\"$fname\"\r\n" .
      
"Content-Transfer-Encoding: base64\r\n" .
      
"Content-ID: <$fname>\r\n" .
      
"Content-Disposition: attachment; " .
      
"filename=".$fname."\r\n" .
      
"\n".chunk_splitbase64_encode($data), 68"\n");

    }

 }
?>



где:
$subscribe_message тело письма
$subscribe_subject заголовок письма
$row['email'] емайл кому отправляем письмо
$att_path_full путь до директории где хранится файл
$row['file'] тут содержится список имён файлов с расширением и чередуется через точку запятую, например: file1.jpg;file2.gif;file3.gif
$sent_format формат письма, текстовый либо html
$sent_kodir кодировка письма

насчёт неправильности заголовков, не могли бы подсказать что не правильно

  Ответить  
 
 автор: Trianon   (18.10.2008 в 12:51)   письмо автору
 
   для: web777   (18.10.2008 в 12:48)
 

в частности здесь у Вас name переползает на следующую строку без фолдинга:
$mes .= "Content-Type: application/octet-stream;\r\n" .
"name=\"$fname\"\r\n" .

Использование разных терминаторов строки \r\n и \n в разных местах тоже не добавляет надежности.

Чтобы исправлять ошибки в таком коде, нужно смотреть порождаемый текст письма глазами, и сравнивать его с тем, что создают нормальные почтовые клиенты.
Если, конечно, неохота соответствующие стандарты изучать.

  Ответить  
 
 автор: web777   (18.10.2008 в 13:32)   письмо автору
 
   для: Trianon   (18.10.2008 в 12:51)
 

спасибо, тогда займусь изучением заголовков

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования