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

Форум PHP

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

 

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

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

тема: Кодировка заголовка письма с нескольким вложениями
 
 автор: Quies   (14.09.2008 в 17:02)   письмо автору
 
 

Проблемы с кодировкой заголовка в самописном классе для работы с почтой.

Вот участок, отвечающий за отправку письма:

<?
// -------------- ЗАГОЛОВКИ --------------  

$boundary "--".md5(uniqid(time())); // генерируем разделитель 
$headers .= "MIME-Version: 1.0\n"
$headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n"
$headers .= "From: ".$this->from."\n";
$multipart .= "--$boundary\n"

//$kod = 'koi8-r'; 
$kod 'windows-1251'

$multipart .= "Content-Type: text/html; charset=$kod\n"
$multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n"
$multipart .= "$message\n\n"

$message_part "--$boundary\n"

// грузим файлы и получаем пути к ним
$arr=$this->upload();


// здесь обходится массив с путями до файлов
// которые в последствии будут отправлены в письме
foreach($arr as $key=>$value){

$fp fopen($value["path"],"r");   

if (!
$fp) { 
print 
"Cannot open file";   
// конец условия

// грузим файл
$file fread($fpfilesize($value["path"]));   
fclose($fp);  

// удаляем файлы после отправки письма
if($this->del) { unlink($value["path"]); }

$message_part .= "--$boundary\n"
$message_part .= "Content-Type: application/octet-stream\n"
$message_part .= "Content-Transfer-Encoding: base64\n"
$message_part .= "Content-Disposition: attachment; filename = \"".$value["name"]."\"\n\n"
$message_part .= chunk_split(base64_encode($file))."\n"

// конец цикла

$multipart .= $message_part."--$boundary--\n"

// здесь попробовал использовать функцию
// convert_cyr_string но не помогло
if(!mail($this->emailconvert_cyr_string(stripslashes($this->subject),'k','w'), $multipart$headers)) { 
return 
false
} else {
if(
$this->fsend) return $arr;
// конец условия
?>


Само сообщение приходит в нормальной кодировки, и файлы тоже пересылаются, но заголовок в кракозябрах.
Прочитал вот здесь http://www.spravkaweb.ru/php/sovet/mail что дело может быть в том что заголовку нужно прописывать свой $header.='Content-type: text/html; charset="windows-1251"'; но получается так что, если поставить такой заголовок сразу после $headers .= "MIME-Version: 1.0\n"; то заголовок приходит в нормальной кодировке, но в сообщение добавляются записи из заголовков, а вместо вложений просто код(текст).

Возможно как то неправильно, заголовки составлены?

  Ответить  
 
 автор: sim5   (14.09.2008 в 17:08)   письмо автору
 
   для: Quies   (14.09.2008 в 17:02)
 

Не правильно, хотя бы потому, что отсуттсвует заголовок:
Content-Type: multipart/related; boundary="$boundary" ;type="text/html"

  Ответить  
 
 автор: Quies   (14.09.2008 в 17:24)   письмо автору
 
   для: sim5   (14.09.2008 в 17:08)
 

А где именное его добавить? Пробывал и в $headers и в $multipart, вообще почему то письмо приходит, без текста и с кривым заголовком.

пробывал так:

<?
$headers 
.= "MIME-Version: 1.0\n"
$headers .='Content-Type: multipart/related; boundary="$boundary" ;type="text/html"';
$headers .= "From: ".$this->from."\n";
$multipart .= "--$boundary\n";
?>

и так

<?
$multipart 
.='Content-Type: multipart/related; boundary="$boundary" ;type="text/html"';
$multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n"
$multipart .= "$message\n\n"
?>

  Ответить  
 
 автор: Trianon   (14.09.2008 в 17:32)   письмо автору
 
   для: Quies   (14.09.2008 в 17:24)
 

Это что за новоявленныей метод кодирования такой Quot-Printed?
$multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";  


Сами поля заголовка тоже нужно кодировать, кодирование сообщения и кодирование полей его заголовка - вещи независимые.
См. RFC-2047


sim5: multipart/related тут не при чем. Он нужен только тогда, когда требуется передать html-код вместе с объектами, на которые он cсылается.

  Ответить  
 
 автор: sim5   (14.09.2008 в 17:34)   письмо автору
 
   для: Trianon   (14.09.2008 в 17:32)
 

Ну автор говорит о передаваемом тексте, а где и что у него передается вообще не видно.

  Ответить  
 
 автор: Quies   (14.09.2008 в 17:43)   письмо автору
 
   для: sim5   (14.09.2008 в 17:34)
 

в самом низу кода:

<?
// здесь попробовал использовать функцию
// convert_cyr_string но не помогло
if(!mail($this->emailconvert_cyr_string(stripslashes($this->subject),'k','w'), $multipart$headers)) { 
return 
false
} else {
if(
$this->fsend) return $arr;
// конец условия 
?>

Если вы про это.

  Ответить  
 
 автор: sim5   (14.09.2008 в 17:54)   письмо автору
 
   для: Quies   (14.09.2008 в 17:43)
 

В общем я дал ссылку, читайте. Там и как правильно составить иерархию почтового сообщения, и как правильно сделать вложения/прикрепления (имею ввиду разницу ссылок на картинки), как кодировать тему письма и т.д..

  Ответить  
 
 автор: Quies   (14.09.2008 в 17:37)   письмо автору
 
   для: Trianon   (14.09.2008 в 17:32)
 

Точно не знаю :) взял кусок кода, работает и ладно (оказалось, что не совсем ладно).

  Ответить  
 
 автор: Quies   (14.09.2008 в 17:33)   письмо автору
 
   для: sim5   (14.09.2008 в 17:08)
 

Немного ошибся вот так:

<?
$headers 
.= "MIME-Version: 1.0\n"
$headers .='Content-Type: multipart/related; boundary="'.$boundary.'" ;type="text/html"';
$header.='Content-type: text/html; charset="windows-1251"';
$headers .= "From: ".$this->from."\n";
$multipart .= "--$boundary\n"
?>


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

  Ответить  
 
 автор: sim5   (14.09.2008 в 17:35)   письмо автору
 
   для: Quies   (14.09.2008 в 17:33)
 

Вы имеете ввиду тему письма?

  Ответить  
 
 автор: Quies   (14.09.2008 в 17:39)   письмо автору
 
   для: sim5   (14.09.2008 в 17:35)
 

Да, заголовок в смысле темы письма.

  Ответить  
 
 автор: sim5   (14.09.2008 в 17:41)   письмо автору
 
   для: Quies   (14.09.2008 в 17:39)
 

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

  Ответить  
 
 автор: Quies   (14.09.2008 в 17:44)   письмо автору
 
   для: sim5   (14.09.2008 в 17:41)
 

Спасибо, посмотрю.

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

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