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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: аттач цепляет в ужасном виде

Сообщения:  [1-10]   [11-14] 

 
 автор: Trianon   (08.08.2006 в 20:24)   письмо автору
 
   для: elenaki   (08.08.2006 в 16:44)
 

Outlook - далеко не единственная почтовая программа. Да и web-почт есть великое множество.
На мой взгляд, если ставить скрипт в боевое (считайте коммерческое) применение, то нужно озаботиться, чтобы стандарты представления письма удовлетворялись максимально полно.
Это и кодирование строк в заголовках, и кодирование имен прикрепляемых файлов, и возможно даже формирование обеих алтернативных секций (и html и голый текст) в одном письме.
Правда абсолютно всем клиентам не угодишь, и где-то на пути вылизывания процесса формирования письма всё-равно придется поставить точку. Компромисс выбирать Вам. ))

   
 
 автор: elenaki   (08.08.2006 в 16:44)   письмо автору
 
   для: Trianon   (08.08.2006 в 16:20)
 

это МОЙ сервер чудит? у меня работало и в той версии, которую я привела выше.
переделка потребовалась, когда некоторые клиенты начали жаловаться, что к ним
приходит нечитаемая абракадабра. я проверяла все отсылки писем и через Outlook
и через веб-почту, все было видно. но раз народ жалуется - переделала так, чтоб в
тело письмо включался HTML. и после этого и у меня перестало читаться. вот сейчас
с вашей помощью справились. надо будет теперь послать тем, которые не видели
раньше. интересно, что к ним придет... а с этого хостинга мы уйдем скоро. зануды они.

   
 
 автор: Trianon   (08.08.2006 в 16:20)   письмо автору
 
   для: elenaki   (08.08.2006 в 16:12)
 

почтовая система у Вашего хостера, похоже, убогая... в том смысле, что в php-мануале (в описании функции mail) это про нее:

additional_headers (optional)
String to be inserted at the end of the email header.

This is typically used to add extra headers (From, Cc, and Bcc). Multiple extra headers should be separated with a CRLF (\r\n).

Замечание: When sending mail, the mail must contain a From header. This can be set with the additional_headers parameter, or a default can be set in php.ini.

Failing to do this will result in an error message similar to Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing.

Замечание: If messages are not received, try using a LF (\n) only. Some poor quality Unix mail transfer agents replace LF by CRLF automatically (which leads to doubling CR if CRLF is used). This should be a last resort, as it does not comply with RFC 2822.

   
 
 автор: elenaki   (08.08.2006 в 16:12)   письмо автору
 
   для: Trianon   (08.08.2006 в 16:05)
 

получилось!!!!!! ура!!!!!!! заработало!!!!!!!
спасибо. Trianon - ты супер! :):):)

   
 
 автор: Trianon   (08.08.2006 в 16:05)   письмо автору
 
   для: elenaki   (08.08.2006 в 15:42)
 

А если сделать $EOL= "\n";
?

   
 
 автор: elenaki   (08.08.2006 в 15:42)   письмо автору
 
   для: Trianon   (08.08.2006 в 15:20)
 

это мне влепило в тему:
dGVzdCBzZW5kIHdpdGggYXR0YWNobWVudA==

вот, смотрите, что пришло. теперь и тема не читается. опять заголовки в теле письма. а
само письмо - в виде последних трех строк на две страницы.

PS.
попробовала послать письмо в виде HTML, чтоб проверить, не сломалось ли. и ... письмо
нормально, а в теме - тот же набор случайных букв и цифр. может, не надо тему кодировать?

   
 
 автор: Trianon   (08.08.2006 в 15:20)   письмо автору
 
   для: elenaki   (08.08.2006 в 14:51)
 

Разделение заголовков и тела основного сообщения выполняется самой функцией mail.
С учетом этого я бы переписал код так:

<?
function send_mail($mail_to$thema$html$path)  
  { if (
$path) { 
    
$fp fopen($path,"rb");  
    if (!
$fp)  
    { print 
"Cannot open file";  
      exit();  
    }  
    
$file fread($fpfilesize($path));  
    
fclose($fp);  
    } 
    
$name "file.ext"// в этой переменной надо сформировать имя файла (без всякого пути) 
    
$EOL "\r\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-1253$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;           //esli NE poslano 
      

    else { 
//// esli poslano  
    
return True
    } 
exit; 
  } 
//// end of function 
?>

   
 
 автор: elenaki   (08.08.2006 в 14:51)   письмо автору
 
   для: Trianon   (08.08.2006 в 14:31)
 


function send_mail($mail_to, $thema, $html, $path) 
  { if ($path) {
    $fp = fopen($path,"r"); 
    if (!$fp) 
    { print "Cannot open file"; 
      exit(); 
    } 
    $file = fread($fp, filesize($path)); 
    fclose($fp); 
    }
    $boundary     = "--".md5(uniqid(time())); // ?????????? ??????????? 
    $headers    = "MIME-Version: 1.0\n"; 
    $headers   .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
    $headers   .= "From: address@server.comr\r\n\r\n";
    
    $multipart  = "--$boundary\n"; 
    $multipart .= "Content-Type: text/html; charset=windows-1253\n"; 
    $multipart .= "Content-Transfer-Encoding: base64\n"; 
    $multipart .= "$html\n"; 

    $message_part  = "--$boundary\r\n"; 
    $message_part .= "Content-Type: application/octet-stream\r\n"; 
    $message_part .= "Content-Transfer-Encoding: base64\r\n"; 
    $message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n"; 
    $message_part .= chunk_split(base64_encode($file))."\n"; 
    $multipart    .= $message_part."--$boundary--\r\n"; 
    
        if(!mail($mail_to, $thema, $multipart, $headers)) 
         {return False;           //esli NE poslano
      }
    else { //// esli poslano 
    return True;
    }
exit;
  } //// end of function


функция взята из раздела download. переменные $thema и $path определяются выше,
перед функцией. $mail_to выбирается в цикле из списков рассылки. $path - путь к
прикрепляемому файлу, тоже определяется выше.
сначала идет сбор адресов, по которым надо послать. в цикле поочереди открываются
нужные списки рассылки и данные из них заносятся в один массив. потом в цикле, пока
есть адреса в этом массиве, в зависимости от того, нужно ли слать простое письмо или
в виде HTML или с аттачментом, вызывается или эта функция (выше) или просто mail().

   
 
 автор: Trianon   (08.08.2006 в 14:31)   письмо автору
 
   для: elenaki   (08.08.2006 в 14:29)
 

показывайте скрипт.

   
 
 автор: elenaki   (08.08.2006 в 14:29)   письмо автору
 
   для: Trianon   (08.08.2006 в 14:10)
 

не получается :( все равно пишет кучу кода в теле письма, начиная с заголовков
Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename = "attachments/VolumeC.txt" ( в одну строку, безо всяких переводов строк).
не понимает он \r\n. а просто с \n (но без аттачмента) приходит нормально.


а вот с темой проблем не было, даже если письмо не читалось - тема читалась.
письмо в виде HTML доходит нормально. письмо просто текст без аттачмента - тоже.
а просто текст с аттачментом (текстом, doc или картинкой) - вываливает кучу кода
в тело письма. и ничего, кроме темы, не читается.

   

Сообщения:  [1-10]   [11-14] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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