Добрый день. Сталкнулся с такой проблеммой. Я отправляю на mail.ru письмо с атачем файла. Все приходит, но русский текст идет символами вопроса(http://c2n.me/ioStfH.png), хотя когда смотриш на письмо в списке - текст отображается нормально (а когда открываеш письмо - вместо кирилицы символы). http://c2n.me/ioLZ0e.png - тут в списке тело письма видно нормально http://c2n.me/ioStfH.png - а когда открываеш письмо - символы вместо кириллицы header('Content-Type: text/plain; charset="UTF-8"'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', FALSE); header('Pragma: no-cache'); ......... $to = "mail@mail.ru"; $from = "dget@gdet.ru"; $subject = "ДЖЭТ. Резюме от ".$surname." ".$name; $message = "Пользователь ".$surname." ".$name." отправил на сайте ДЖЭТ свое резюме.".((!empty($comment)) ? " Сопроводительное письмо: ".$comment : ""); $boundary = "---"; $headers = "From: $from\nReply-To: $from\n"; $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\""; $body = "--$boundary\n"; $body .= "Content-type: text/html; charset='utf-8'\n"; $body .= "Content-Transfer-Encoding: quoted-printablenn"; $body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode($filename)."?=\n\n"; $body .= $message."\n"; $body .= "--$boundary\n"; $file = fopen($uploaddir . $filename, "r"); $text = fread($file, filesize($uploaddir . $filename)); fclose($file); $body .= "Content-Type: application/octet-stream; name==?utf-8?B?".base64_encode($uploaddir . $filename)."?=\n"; $body .= "Content-Transfer-Encoding: base64\n"; $body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode($uploaddir . $filename)."?=\n\n"; $body .= chunk_split(base64_encode($text))."\n"; $body .= "--".$boundary ."--\n"; mail($to, $subject, $body, $headers); Может кто подсказать в чем причина? Заранее спасибо! (файл с кодом в кодировке UTF-8 (без BOM))
Нет, без $body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode($filename)."?=\n\n"; в теле письма вообще нет текта - только присоединенный файл
это из-за еще предыдущей строчки: ))) каждый заголовок должен заканчиваться: \n а между заголовками и телом должно быть два перевода: \n\n. edited 2014-06-29: согласно RFC вместо \n должна использоваться пара \r\n. но готовые примеры и масса обсуждений говорят, что на практике почтовые агенты принимают и \n тоже. (однако лучше следовать правилам) Итого (если не заменять \n на \r\n): Код (PHP): $body = "--$boundary\n"; $body .= "Content-type: text/html; charset='utf-8'\n"; $body .= "Content-Transfer-Encoding: quoted-printable\n\n"; // отделяем тело сообщения двумя переводами строки! $body .= $message."\n"; $body .= "--$boundary\n";