mail() проблемы с кодировкой

Статус
В этой теме нельзя размещать новые ответы.

1Dreamweaver1

Профессор
Регистрация
4 Янв 2008
Сообщения
417
Реакции
45
Есть форма обратной связи. Письма приходять через Outloock, в непонятной кодировке. подскажите как исправить.

Код:
$from = $_POST['from'];
$fromname = $_POST['fromname'];
$message = $_POST['message'];

$message=convert_cyr_string($message,"w","k");
$subject=convert_cyr_string($subject,"w","k");

$messagewithinfo = "$message\n\Комментарии: $Comments\nИмя: $fromname\nE-mail: $from";
mail($to, $subject, $messagewithinfo, "From: $fromname <$from>\r\n" . "Reply-To: $from\r\n" . "X-Mailer: PHP/" . phpversion());
 
По идеи должно приходить в той же кодировке что и файл
 
текст приходит в кодировке, которая была на странице с формой обратной связи

Варианты :
1) смотри кодировку страницы с формой
2) можешь в mail() добавить заголовки с указанием кодировки
Content-Type: text/plain; charset=
3) смотри функцию convert_cyr_string()
юзай ее перед отправкой сообщения
 
Кодировка на странице формы windows-1251. Если проверять емайл через браузер Для просмотра ссылки Войди или Зарегистрируйся, то письма приходят нормально. Через Outlook приходят каракули.
$headers прописывал, не помогло.
 
PHP:
        $headers  = "From: bla-bla-bla <".$from.">\n";
		$headers .= "Reply-To: <".$from.">\n";
		$headers .= "X-Sender: <".$from.">\n";
		$headers .= "X-Mailer: PHP\n";
		$headers .= "X-Priority: 1\n";
		$headers .= "Return-Path: <".$from.">\n";
		$headers .= "MIME-Version: 1.0\n";
		$headers .= "Content-Type: text/html; charset=windows-1251\n";
	
		mail( $to, $subject, $message, $headers );
 
Попробуй делать iconv() в утф-8 - для аутлука должно сработать
 
Если в браузере смотрится нормально, то может попробовать поменять различны кодировки в самом Аутлуке, если конечно уже не попробовали.
 
Если в браузере смотрится нормально, то может попробовать поменять различны кодировки в самом Аутлуке, если конечно уже не попробовали.
В Outlook кодировки менял, не помогает.
 
PHP:
$option['charset'] = "windows-1251";

if(function_exists("mb_internal_encoding")) mb_internal_encoding($option['charset']);
$you_names_e = (function_exists("mb_encode_mimeheader"))? mb_encode_mimeheader($you_names, $option['charset'], "Q"):$you_names;
$the_themes_e = (function_exists("mb_encode_mimeheader"))? mb_encode_mimeheader($the_themes, $option['charset'], "Q"):$the_themes;

$headers="Return-Path: <".$you_emails.">\n";
$headers.="From: ".$you_names_e." <".$you_emails.">\n";
$headers.="X-Priority: 3\n";
$headers.="Reply-To: ".$you_names_e." <".$you_emails.">\n";
$headers.="To: ".$option['is']." <".$option['mail_to'].">\n";
$headers.="MIME-Version: 1.0\n";
$headers.="Content-Type: text/plain; charset=\"".$option['charset']."\"\n";
$headers.="Content-Transfer-Encoding: 8bit\n";

mail($option['mail_to'],$the_themes_e,$telo,$headers);
 
В современном программировании если испольуешь языки отличные от английского стоит всегда пользоватся кодировкой UTF-8 - это решает все проблемы.
С отправкой почты такая же ситуация:
вот пример кода который гарантированно шлет писма на русском языке:
PHP:
require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "адрес SMTP сервера"; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "login"; // SMTP username
$mail->Password = "password"; // SMTP password
$mail->CharSet = "UTF-8";
$mail->From = "from@example.com";
$mail->FromName = "Отправитель";
$mail->AddAddress("root@host.ru", "Адам Смитт");
$mail->AddReplyTo("info@example.com", "Отвечать сюда");

$mail->WordWrap = 50; // set word wrap to 50 characters
$mail->AddAttachment("cseu9.png", "cs.png"); // optional name
$mail->IsHTML(true); // set email format to HTML

$mail->Subject = "Письмо посвящено это теме";
$mail->Body    = "Здесь мы видим HTML версию письма <b>а здесь написано толстым!</b><br /><img src=\"cs.png\" />";
$mail->AltBody = "Этот текст увидят клиенты которые не отображают письма в HTML формате (правда я таких не знаю)";

if(!$mail->Send())
{
   echo "Message could not be sent. <p>";
   echo "Mailer Error: " . $mail->ErrorInfo;
   exit;
}

echo "Message has been sent";

сам класс можно взять здесь:


p.s. Кодировка текста в коде, соответственно тоже UTF-8
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху