За последние 24 часа нас посетили 51154 программиста и 1806 роботов. Сейчас ищут 800 программистов ...

Знаки вопроса в создаваемом письме функцией mail.

Тема в разделе "PHP для новичков", создана пользователем Keo, 28 янв 2009.

  1. Keo

    Keo Активный пользователь

    С нами с:
    20 сен 2006
    Сообщения:
    38
    Симпатии:
    0
    Есть следующий код, до этого проработавший 4 месяца нормально, но что то произошло и он перестал отдавать нормально русские буквы а вместо них либо знаки вопроса либо кракозябры. Целый день бьюсь и понять не могу в чем дело.

    Уже пробовал и сохранять сам скрипт и в utf-8 и в ANSI но не помогает, может быть не тем пробую сохранить? Сохраняю редактором Unired и RJ TextEd.

    Код (Text):
    1.  
    2.  
    3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    4. <html>
    5. <head>
    6. <meta http-equiv="content-type" content="text/html;charset=utf-8">
    7. </head>
    8.  
    9. <?php
    10.  
    11. // Получатели
    12. $to  = 'admin@site.ru';
    13.  
    14.  
    15.  
    16. // Тема письма
    17. $subject = "ТЕМА письма klaskdlkasd";
    18.  
    19. // Тело письма
    20. $message = "
    21. <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
    22. <html>
    23. <head>
    24. <meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\">
    25. </head>
    26. текст на русском english text
    27. <html>";
    28.  
    29. // To send HTML mail, the Content-type header must be set
    30. $headers  = 'MIME-Version: 1.0' . "\r\n";
    31. $headers .= 'Content-type: text/html; charset="utf-8"' . "\r\n";
    32. $headers .= 'Content-Transfer-Encoding: 8bit'. "\r\n";
    33.  
    34. // Additional headers
    35. $headers .= 'To: admin@site.ru' . "\r\n";
    36. $headers .= 'From:  <admin@site.ru>' . "\r\n";
    37.  
    38. // Mail it
    39. mail($to, $subject, $message, $headers);
    40.  
    41. ?>
    42.  
    43. </html>
    Вдруг у меня глаз замылился и не вижу чего то самого явного...
     
  2. GudGuy

    GudGuy Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    а чем вы почту принимаете?
     
  3. unicross

    unicross Активный пользователь

    С нами с:
    14 янв 2009
    Сообщения:
    194
    Симпатии:
    0
    А зачем utf-8 в кавычках?

    mb_language() + mb_send_mail() Или функция mail() была перегружена?
     
  4. Keo

    Keo Активный пользователь

    С нами с:
    20 сен 2006
    Сообщения:
    38
    Симпатии:
    0
    Принимаю Батом (пробовал также Thunderbird). Почтовый сервер Mdaemon 9.6.1.

    Попробую mb_send_mail.
     
  5. Keo

    Keo Активный пользователь

    С нами с:
    20 сен 2006
    Сообщения:
    38
    Симпатии:
    0
    Попробовал так.

    // Mail it
    mb_language('uni');
    mb_send_mail($to, $subject, $message, $headers);


    кавычки из utf-8 убрал...


    Все тоже самое, ничего не изменилось.

    Все таки я склоняюсь к тому что код который я написал неправильно сохраняется в кодировке utf. Как то можно убедиться что все нормально? Или может кто у себя попробует запустить этот код, и скажите как приходит почта...
     
  6. unicross

    unicross Активный пользователь

    С нами с:
    14 янв 2009
    Сообщения:
    194
    Симпатии:
    0
    Попробуйте так:
    PHP:
    1. <?php
    2. header('Content-Type: text/html; charset=utf-8');
    3. mb_internal_encoding('UTF-8'); // Установка кодировки
    4. // Получатели
    5. $to  = [email='admin@site.ru]'admin@site.ru[/email]';
    6. // Тема письма
    7. $subject = "ТЕМА письма klaskdlkasd";
    8. $subject = mb_encode_mimeheader($subject, "UTF-8", "Q");
    9. // Тело письма
    10. $message = "
    11. <b>текст на русском</b> <font color=red>english text</font>
    12. ";
    13.  
    14. // To send HTML mail, the Content-type header must be set
    15. $headers  = 'MIME-Version: 1.0' . "\r\n";
    16. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
    17. $headers .= 'From:  <admin@site.ru>';
    18. mail($to, $subject, $message, $headers);
    19.  
    20. ?>
    Сам скрипт должен быть в UTF-8 без BOM.
     
  7. Keo

    Keo Активный пользователь

    С нами с:
    20 сен 2006
    Сообщения:
    38
    Симпатии:
    0
    Огромное спасибо все заработало!!!

    Только оставил прежний вариант строчки

    Код (Text):
    1. $subject = "русский буквы";
    иначе в теме кракозябры приходили.