Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/105: Рейтинг темы: голосов - 105, средняя оценка - 4.84
1 / 1 / 4
Регистрация: 29.07.2010
Сообщений: 211

На mail.ru приходит письмо с неправильной кодировкой

27.08.2010, 09:28. Показов 19940. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При регистрации пользователя на сайте ему на почтовый адрес приходит письмо с активацией. на все почтовые ящики приходит всё ак положено..а вот на mail.ru в неправльной кодировке:
п?п?я? п©п?п?я?п?п?я?п?п?п?п?п?я? п?п?я?п?п? я?п?пЁп?я?я?я?п?я?п?п? п?п?п?п?я?п?п?п?п?п? п©п?я?п?п?я?п? п©п? я?я?я?п?п?п?, я?п?п?п?п?п?п?п?п? п?п?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.08.2010, 09:28
Ответы с готовыми решениями:

На mail ру приходит письмо с неправильной кодировкой
на яндекс и gmail все хорошо. Прошу подправить,что не так. И еще если письмо без вложения то текст письма не отправляеться только...

Приходит пустое письмо php mail
Нашел здесь простой скрипт отправки почты. Но почему-то на почту приходят пустые письма без темы <form action=""...

Неверная кодировка письма приходящего на почту
Отправляю письмо через функцию mail() <?php $your_name = substr(htmlspecialchars(trim($_POST)), 0, 100); ...

8
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
27.08.2010, 14:22
sergm87, кодировку указываете в заголовках письма? Код покажите, каким отправляете.

Добавлено через 3 минуты
sergm87, Вы какой кодировкой пользуетесь?
0
71 / 71 / 5
Регистрация: 02.11.2009
Сообщений: 348
27.08.2010, 14:38
Пока на сокеты не перешёл, использовал такую функцию
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function send_email($email,$text,$title)
{
    $msg    =   
            "
            <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'
    'http://www.w3.org/TR/html4/loose.dtd'>
    <html>
    <head>
    <meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>
    <title>$title</title>
    </head>
    <body>
    $text   
    </body>
    </html>";
    return mail($email,$title,$msg,"Content-Type: text/html; charset=\"windows-1251\"\n");
}
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
27.08.2010, 15:09
Попробуйте так:
PHP
1
mail($email,$title,$msg,"Content-Type: text/html; charset=cp1251");
0
 Аватар для nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
27.08.2010, 20:21
прошу прощения за ссылку, но статья слишком большая, чтобы перенести сюда(((
[Ссылка удалена!]
Статья с ссылки
Функция mail

Чем хорош язык php,так это тем, что в нем реализована масса функций, которые позволяют одним движением решить целую кучу проблем. Но с другой стороны, это расхолаживает и зачастую ставит в тупик неопытных программистов, оказывая им медвежью услугу.
Функция mail() яркое тому подтверждение.

Казалось бы - чего проще, написал скрипт:
PHP
1
2
3
4
5
6
7
<?php
 
   $to = 'mail@mail.ru'; 
   $subject = 'Табе пакет'; 
   $message = 'Вот такое вот письмо';
 
   mail($to, $subject, $message);
И жди весточку. Ведь ясно сказано - функция mail() принимает аргументами
1. Адрес получателя
2. Тему письма
3. Текс сообщения
4. (Необязательный параметр) Заголовки.

А не все так просто. Запустите этот скрипт на локалхосте и посмотрите, что находится в папке по адресу
Z:\tmp\!sendmail
Это так называемая почтовая заглушка, которая помогает в отладке подобного рода скриптов. Она перехватывает письма, отправленные Денвером и складывает туда.

Так вот, если Вы откроете письмо, то увидите примерно следующую картину:

Почему так? Да очень просто. Во первых, как уже было сказано, в тему письма нельзя допускать кирилицу. А как же быть? Ведь письмо хочется подписать по русски, а не абы как...
Можно воспользоваться транслитом. Но это еще смешнее. По этому будем делать грамотно - закодируем кирилицу согласно предписаниям. А они гласят:
Кодировать тему нужно по следующему алгоритму.
PHP
1
$subject = "=?utf-8?b?". base64_encode($subject) ."?=";
Что это такое. Сначала спецсимволы =? которые дают понять, что сейчас будет служебная информация.
Потом собственно сама кодировка utf-8.
Потом опять разделитель ? и способ кодирования b. Способа два - "Q-encoding" (обозначается буквой Q) и "Base64" (соответственно b).
Мы выбрали второй, по этому сам текст темы будем кодировать с помощью функции base64_encode()
Ну и далее опять комбинация символов, обознячающая конец темы: ?=
Исправим наш скрипт так:
PHP
1
2
3
4
5
6
7
8
<?php
 
   $to = 'mail@mail.ru'; 
   $subject = 'Табе пакет';
   $subject = "=?utf-8?b?". base64_encode($subject) ."?=";
   $message = 'Вот такое вот письмо';
 
   mail($to, $subject, $message);
и посмотрим, что получится. Ага? Тема теперь видна нормально? То то.

А как же быть с самим сообщением? Тут тоже нет особых сложностей. Нужно просто напросто указать требуемую информацию в заголовках. Ведь по большому счету все сервера ведут себя примерно одинаково: есть инструкция - выполняют. Нет - творят что хотят. По этому лучше не искушать судьбу и прописать заголовки как положено. А положено так:
PHP
1
2
3
4
5
6
7
8
9
<?php
 
   $to = 'email@mail.ru'; 
   $subject = 'Табе пакет'; 
   $subject = '=?utf-8?b?'. base64_encode($subject ) .'?='; 
   $headers = 'Content-type: text/plain; charset="utf-8"'; 
   $message = 'Вот такое вот письмо'; 
    
   mail($to, $subject, $message, $headers);
Тут мы указали тип письма (text/plain, то есть простой текст) и кодировку (utf-8). Запустите скрипт и полюбуйтесь - все теперь прекрасно видно.

Но радоваться рано. У нас в письме нет отправителя. А это верный признак того, что письмо будет расценено как спам и спам-фильтр порядочного почтового агента его заблокирует. Не будем писать анонимок, подпишемся:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
 
          
   $to = 'email@mail.ru';       
   $from = 'email@yandex.ru'; 
   $subject = 'Табе пакет'; 
   $subject = '=?utf-8?b?'. base64_encode($subject) .'?='; 
   $headers = "Content-type: text/plain; charset=\"utf-8\"\r\n"; 
   $headers .= "From: ". $from ." <". $from ."> \r\n";    
   $message = 'Вот такое вот письмо'; 
   
   mail($to, $subject, $message, $headers);
Если мы теперь откроем письмо в редакторе, то увидим такую картину:
X-Sendmail-Cmdline: sendmail.pl -t -i
To: email@mail.ru
Subject: =?utf-8?b?0KLQsNCx0LUg0L/QsNC60LXRgg==?=
Content-type: text/plain; charset="utf-8"
From: <email@yandex.ru>
Вот такое вот письмо
что уже очень похоже на правду. Но для полного счастья еще не достаточно. Добавим пару жизненно важных заголовков:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
   $to = 'email@mail.ru';       
   $from = 'email@yandex.ru'; 
   $subject = 'Табе пакет'; 
   $subject = '=?utf-8?b?'. base64_encode($subject) .'?='; 
   $headers = "Content-type: text/plain; charset=\"utf-8\"\r\n"; 
   $headers .= "From: <". $from .">\r\n"; 
   $headers .= "MIME-Version: 1.0\r\n"; 
   $headers .= "Date: ". date('D, d M Y h:i:s O') ."\r\n"; 
   $message = 'Вот такое вот письмо'; 
   
   mail($to, $subject, $message, $headers);
Есть еще один нюанс. Очень часто хостер принудительно меняет адрес отправителя на свой. Что бы этого не произошло, нужно добавить четвертый параметр в функцию mail(). Им является обратный адрес, который предваряется символами -f (Без пробела, прямо так: -femail@yandex.ru)
PHP
1
mail($to, $subject, $message, $headers, '-f'. $from );
Однако нужно знать, что не все хостеры это любят и всячески пытаются препятствовать. Иногда этот параметр становится причиной пустого почтового ящика.
Источник
3
1 / 1 / 4
Регистрация: 29.07.2010
Сообщений: 211
30.08.2010, 11:48  [ТС]
вот часть кода отправки письма. пробовал и UTF8 и cp1251
PHP
1
2
3
$header .= "Content-Type: text/plain; charset=\"cp1251\"
                ";
                if(mail($email, "Регистрация на сайте ".$cnf['title']."", $text, $header))
Добавлено через 2 часа 1 минуту
PHP
1
2
3
4
5
6
7
8
$header  = "From: ".$cnf['title']." <".$cnf['admin']['email'].">
                ";
                $header .= "Mime-version: 1.0
                ";
                $header .= "Subject:    ".$cnf['title']."
                ";
                $header .= "Content-Type: text/plain; charset=\"UTF-8\"";
                if(mail($email, "   ".$cnf['title']."", $text, $header))
Так приходит в неправильной кодировке.
Вот что получается:От кого: п п п п п п я я п п VIP-Relax <no-reply@vip-relax.com> Mime-version: 1.0 Subject: п п пЁп я я я п я п я п п я п п я п п п п п п п я я п п VIP-Relax Content-Type: text/plain; charset=\"utf-8\"
Если просто делаю:
PHP
1
2
3
4
5
 $header = 'Content-type: text/plain; charset="utf-8"'; 
                 
        
                
                if(mail($email, "Регистрация на сайте ".$cnf['title']."", $text, $header))
то приходит в правильной кодировке, только нет темы, и нужно от кого приходит
0
30.08.2010, 12:46

Не по теме:

nubo, а нам нужно только по функции mail(). Остальное не по теме.

0
5 / 5 / 3
Регистрация: 19.09.2013
Сообщений: 303
09.10.2013, 08:48
Цитата Сообщение от nubo Посмотреть сообщение
"Date: ". date('D, d M Y h:i:s O') ."\r\n";
Скажи что это за функция, и почему на нее ругаются ? на хостинге в php.ini пробовал вот это прописать date.timezone = “Europe/Moscow” не помогло
0
 Аватар для nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
09.10.2013, 14:07
Кто ругается? Что именно не нравится? Это обычная штатная функция date()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.10.2013, 14:07
Помогаю со студенческими работами здесь

Проблемы с кодировкой письма приходящего на почту
Есть 2 файла в кодировке utf-8. Первый: &lt;form method=&quot;POST&quot; action=&quot;pages/mailform.php&quot;&gt; Имя:&lt;br /&gt; &lt;input...

Кодировка письма. Приходят квадратики
Приветствую! Такая проблема: Кодировка файла UTF-8 Из него отправляется e-mail, в headers указано 'Content-Type: text/html;...

Функция mail. На почту вместо письма приходит файл с текстом
Всем привет, вопрос наверно нубский, но прошу строго не судить пхп недавно изучаю. Вобщем ситуация следующая, делаю регистрацию с...

Неправильная кодировка mail()
mail(&quot;mail@mail.ru&quot;, &quot;тема&quot;, &quot;текст сообщения&quot;); Тема приходит нормально, а текст сообщения на mail.ru приходит иероглифами. ...

На почту приходят письма в неверной кодировке
проблемы с кодировкой обработчика-приходят кракозябры на почту (что в обработчике на русском приходят корректно) кодировка страницы utf-80...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru