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

Тема в разделе "PHP", создана пользователем 1Dreamweaver1, 6 май 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. 1Dreamweaver1

    1Dreamweaver1

    Регистр.:
    5 янв 2008
    Сообщения:
    417
    Симпатии:
    44
    Есть форма обратной связи. Письма приходять через 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());
     
  2. signet

    signet Создатель

    Регистр.:
    1 апр 2007
    Сообщения:
    26
    Симпатии:
    11
    По идеи должно приходить в той же кодировке что и файл
     
  3. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    текст приходит в кодировке, которая была на странице с формой обратной связи

    Варианты :
    1) смотри кодировку страницы с формой
    2) можешь в mail() добавить заголовки с указанием кодировки
    Content-Type: text/plain; charset=
    3) смотри функцию convert_cyr_string()
    юзай ее перед отправкой сообщения
     
    1Dreamweaver1 нравится это.
  4. 1Dreamweaver1

    1Dreamweaver1

    Регистр.:
    5 янв 2008
    Сообщения:
    417
    Симпатии:
    44
    Кодировка на странице формы windows-1251. Если проверять емайл через браузер Перейти по ссылке, то письма приходят нормально. Через Outlook приходят каракули.
    $headers прописывал, не помогло.
     
  5. masto

    masto Прохожие

    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 );
     
  6. vovaNux

    vovaNux Постоялец

    Регистр.:
    10 апр 2007
    Сообщения:
    125
    Симпатии:
    16
    Попробуй делать iconv() в утф-8 - для аутлука должно сработать
     
    1Dreamweaver1 нравится это.
  7. itex

    itex

    Регистр.:
    15 ноя 2007
    Сообщения:
    274
    Симпатии:
    64
    Если в браузере смотрится нормально, то может попробовать поменять различны кодировки в самом Аутлуке, если конечно уже не попробовали.
     
  8. 1Dreamweaver1

    1Dreamweaver1

    Регистр.:
    5 янв 2008
    Сообщения:
    417
    Симпатии:
    44
    В Outlook кодировки менял, не помогает.
     
  9. Mr.Emm

    Mr.Emm Постоялец

    Регистр.:
    5 май 2008
    Сообщения:
    147
    Симпатии:
    110
    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);
     
    1Dreamweaver1 нравится это.
  10. nnmkayf

    nnmkayf

    Регистр.:
    25 июл 2007
    Сообщения:
    153
    Симпатии:
    98
    В современном программировании если испольуешь языки отличные от английского стоит всегда пользоватся кодировкой 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";
    сам класс можно взять здесь:
    http://phpmailer.sourceforge.net/

    p.s. Кодировка текста в коде, соответственно тоже UTF-8
     
    1Dreamweaver1 нравится это.
Статус темы:
Закрыта.