|
|
|
| Проблемы с кодировкой заголовка в самописном классе для работы с почтой.
Вот участок, отвечающий за отправку письма:
<?
// -------------- ЗАГОЛОВКИ --------------
$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($fp, filesize($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->email, convert_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"; то заголовок приходит в нормальной кодировке, но в сообщение добавляются записи из заголовков, а вместо вложений просто код(текст).
Возможно как то неправильно, заголовки составлены? | |
|
|
|
|
|
|
|
для: Quies
(14.09.2008 в 17:02)
| | Не правильно, хотя бы потому, что отсуттсвует заголовок:
Content-Type: multipart/related; boundary="$boundary" ;type="text/html" | |
|
|
|
|
|
|
|
для: 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";
?>
|
| |
|
|
|
|
|
|
|
для: Quies
(14.09.2008 в 17:24)
| | Это что за новоявленныей метод кодирования такой Quot-Printed?
$multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
|
Сами поля заголовка тоже нужно кодировать, кодирование сообщения и кодирование полей его заголовка - вещи независимые.
См. RFC-2047
sim5: multipart/related тут не при чем. Он нужен только тогда, когда требуется передать html-код вместе с объектами, на которые он cсылается. | |
|
|
|
|
|
|
|
для: Trianon
(14.09.2008 в 17:32)
| | Ну автор говорит о передаваемом тексте, а где и что у него передается вообще не видно. | |
|
|
|
|
|
|
|
для: sim5
(14.09.2008 в 17:34)
| | в самом низу кода:
<?
// здесь попробовал использовать функцию
// convert_cyr_string но не помогло
if(!mail($this->email, convert_cyr_string(stripslashes($this->subject),'k','w'), $multipart, $headers)) {
return false;
} else {
if($this->fsend) return $arr;
} // конец условия
?>
|
Если вы про это. | |
|
|
|
|
|
|
|
для: Quies
(14.09.2008 в 17:43)
| | В общем я дал ссылку, читайте. Там и как правильно составить иерархию почтового сообщения, и как правильно сделать вложения/прикрепления (имею ввиду разницу ссылок на картинки), как кодировать тему письма и т.д.. | |
|
|
|
|
|
|
|
для: Trianon
(14.09.2008 в 17:32)
| | Точно не знаю :) взял кусок кода, работает и ладно (оказалось, что не совсем ладно). | |
|
|
|
|
|
|
|
для: 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";
?>
|
Письмо приходит и с нормальным текстом и с вложениями,. но заголовок по прежнему в кракозябрах. | |
|
|
|
|
|
|
|
для: Quies
(14.09.2008 в 17:33)
| | Вы имеете ввиду тему письма? | |
|
|
|
|
|
|
|
для: sim5
(14.09.2008 в 17:35)
| | Да, заголовок в смысле темы письма. | |
|
|
|
|
|
|
|
для: Quies
(14.09.2008 в 17:39)
| | Смотрите, в этом разделе совсем недавно были вопросы по почте, я давал ссылку на тему, в которой прикреплял нечто интересно, вам это необходимо почитать. Там ответы на ваши вопросы. | |
|
|
|
|
|
|
|
для: sim5
(14.09.2008 в 17:41)
| | Спасибо, посмотрю. | |
|
|
|