Перейти к контенту

кодировка писем


Рекомендуемые сообщения

1 . по умолчанию кодировка писем стоит iso- (какая то там)

2. кодировка прописывается только хтмл письма

исправляем

1. кодировку

ищем файл sources\classes\class_email.php

в нем строчку 54 вида

 var $char_set     = 'iso-8859-1';

меняем на

 var $char_set     = 'KOI8-R';

вместо koi8-r естественно прописать нужную вам кодировку например windows-1251

2. чтобы кодировка прописывалась и в простых текстовых письмах

ищем функцию function build_headers()

в ней

 	if ( $this->html_email )
  {
  	$this->mail_headers .= "MIME-Version: 1.0\n";
  	$this->mail_headers .= "Content-type: text/html; charset=\"".$this->char_set."\"\n";
  }

меняем на

 	if ( $this->html_email )
  {
  	$this->mail_headers .= "MIME-Version: 1.0\n";
  	$this->mail_headers .= "Content-type: text/html; charset=\"".$this->char_set."\"\n";
  }else	{$this->mail_headers .= "Content-type: text/plain; charset=\"".$this->char_set."\"\n";}

все :D

Ссылка на комментарий
Поделиться на других сайтах

При установленном mb_string и включенном overload'е, в PHP все операции с функцией mail() автоматически перекодируются из текущей системной кодировки в KOI8-R :D
Ссылка на комментарий
Поделиться на других сайтах

:D просто перекодирования мало- надо чтобы строчка с кодировкой прописывалась в заголовке письма, чтобы почтовы программы могли определить автоматически кодировку
Ссылка на комментарий
Поделиться на других сайтах

  • 1 месяц спустя...

Господа, простите великодушно... Глючу я...

 

Сделал все, как на духу - изменил вышеуказанный файл как дОлжно.

 

Вот только проблему имею - на почту nm.ru, например, идет нормально, а вот на ящик с ufanet.ru приходит в виде символов Ïðîâåðêà ðóññêîãî ÿçûêà íà ôîðóìå.

 

Причем, и на форуме при повторной отсылке появляются эти символы и сообщение

Письмо не отправлено, в связи с тем, что Вы уже отправляли письмо в течение последних 15 минут.

 

То есть к первому вопросу - как это может быть я хочу присовокупить еще один - где устанавливается это 15-минутное ограничение?

 

Искренне прошу помощи, так как, видимо не очень корректно составляю запрос на поиск. А собственных сил разобраться, к сожалению, пока не хватает...

Ссылка на комментарий
Поделиться на других сайтах

:D

а так интервал между письмами настраивается здесь

ACP -> Users and Groups -> Manage User Groups

и для каждой группы свои установки

Ссылка на комментарий
Поделиться на других сайтах

Со вторым вопросом проблема решена. Не могу только с первым решить проблему.

Почему один сервер читает заголовки, а второй нет?

Может, выложить часть листинга этого файла? Где-тоя не прав, похоже.

И, главное - такая проблема не только у меня, как минимум еще на 3- форумах с движком 2.0.0 PF3

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

Прежде всего, спасибо winnie , теперь проблем с письмами почти нет.

Одна только маленькая трабла осталась : получаю уведомление о новом приват-сообщении и вижу в своем Outlook Express 6 наполовину :D кривой заголовок. Лезу в хедер письма и читаю вот эдакое

Subject: оПЧПЕ рТЙЧБФ-УППВЭЕОЙЕ ( From Форум *******)

Content-type: text/plain; charset="windows-1251"

From: "Форум *******" <admin@******>

X-Mailer: IPB PHP Mailer

Текст уведомления и вообще все остальные письма с заголовками приходят нормально, в 1251.

Помогите, плз, разобраться кто мне заголовок испохабил и как это поправить.

З.Ы.

Стоит 2.0.0 Final . windows-1251 прописана еще и в .htaccess .

Ссылка на комментарий
Поделиться на других сайтах

Outlook Express -> настроить
Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

Написать на e-mail

 

Все настройки сделал, поле заголовок нормально, а сообщения в случае, если не отправлено, не в Windows-1251.

Ссылка на комментарий
Поделиться на других сайтах

Лезу в хедер письма и читаю вот эдакое

 

про кодировку заголовков писем можно посмотреть тут. работало у меня на 1.2, работает у меня и на 2.0

Ссылка на комментарий
Поделиться на других сайтах

про кодировку заголовков писем можно посмотреть тут
Смотрел. Не может оно мне помочь в принципе, также как и настройка ОЕ. У меня половина заголовка кривая, потому что собран заголовок из двух кусков. Если я перенастрою что угодно, ОЕ не сможет отобразить обе половины нормально.

В общем-то, решение я уже нашел. Та кривая половина, которую я в хедере вижу закопана в lang_email_content.php

$lang['subject__pm_notify'] = 'оПЧПЕ рТЙЧБФ-УППВЭЕОЙЕ';

заменил на

$lang['subject__pm_notify'] = 'Новое Приват-сообщение';

и все исправилось. По ходу видел там еще несколько таких выражений в KOI-8, но глубоко лезть не стал, пока проблема не проявится.

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

Господа, проблема с кодировкой, насколько я понял, может возникать и в следствие того, что СЕРВЕР автоматически перекодирует все тексты в СВОЮ кодировку по умолчанию. Русская кодировка по умолчанию на многих серверах win1251, а в почте нам нужна koi8-r, что делать? Существует такой перекодировщик:

// преобразование из Win1251 в КОИ8-Р
$subject = convert_cyr_string ($subject,w,k);
$message = convert_cyr_string ($message,w,k);
//===============================

Только вот куда бы его подставить?

Проблема не надумана - простым изменением кодировки в переменной я не смог ничего изменить...

Ссылка на комментарий
Поделиться на других сайтах

Только вот куда бы его подставить?

коротко - class_email.php

подробнее тут (с поправкой на версию - строки похожи, но не все соврадают 1 в 1)

 

единственное "НО"(хотя не столь существенное) - Л.С.-ом рапорты с форума приходят прекодираванными в KOI8-R (форум в 1251, вся почта перекодируется в КОИ). соответственно с вариантом рассылки рапортов по e-mail все в норме ;) . либо накосячил при конвертировании (поправил лишнее, хотя не похоже), либо при отправки рапорта он парсится как е-мэйл. на неделе попробую глянуть в чем дело и можно ли исправить :D .

Ссылка на комментарий
Поделиться на других сайтах

  • 2 месяца спустя...

Только что переделывал IPB 2.0.x для отсылки всех писем в кодировке KOI8-R. Предполагается что форум у нас в кодировке Windows-1251. Решение наподобие того что предлагал BeS Yara, только в более компактном виде.

Итак, с самого начала. Проделываем что сказано в первом посте этой темы ($char_set ессно выбираем KOI8-R).

Далее в sources\classes\class_email.php находим

if ($this->temp_dump == 1)
	 {
   $blah = $this->subject."\n------------\n".$this->mail_headers."\n\n".$this->message;
   
   $pathy = $this->root_path.'_mail/'.date("M-j-Y,hi-A").str_replace( '@', '+', $this->to ).".txt";
   $fh = fopen ($pathy, 'w');
   fputs ($fh, $blah, strlen($blah) );
   fclose($fh);
	 }
	 else
	 {

Ниже вставляем код

//-----------------------------------------
//Convert headers and message to koi8-r
//-----------------------------------------
$this->to = convert_cyr_string ($this->to,w,k);
$this->subject = convert_cyr_string ($this->subject,w,k);
$this->message = convert_cyr_string ($this->message,w,k);
$this->mail_headers = convert_cyr_string ($this->mail_headers,w,k);

Всё, сохраняем, закрываем. Если что не так поправьте, а то я в код всего файла не очень вникал.

Ссылка на комментарий
Поделиться на других сайтах

  • 2 месяца спустя...
1 . по умолчанию кодировка писем стоит iso- (какая то там)

2. кодировка прописывается только хтмл письма

исправляем

1. кодировку

ищем файл sources\classes\class_email.php

в нем строчку 54 вида

 var $char_set     = 'iso-8859-1';

меняем на

 var $char_set     = 'KOI8-R';

вместо koi8-r естественно прописать нужную вам кодировку например windows-1251

2. чтобы кодировка прописывалась и в простых текстовых письмах

ищем функцию  function build_headers()

в ней

  if ( $this->html_email )
 {
	 $this->mail_headers .= "MIME-Version: 1.0\n";
	 $this->mail_headers .= "Content-type: text/html; charset=\"".$this->char_set."\"\n";
 }

меняем на

  if ( $this->html_email )
 {
	 $this->mail_headers .= "MIME-Version: 1.0\n";
	 $this->mail_headers .= "Content-type: text/html; charset=\"".$this->char_set."\"\n";
 }else	{$this->mail_headers .= "Content-type: text/plain; charset=\"".$this->char_set."\"\n";}

все :D

 

Сделал, как здесь сказано, теперь жду ;)

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

Проблема решена. Небольшой баг Мэта.

 

Если вложение письма MIME одно, а не более, то кодировка, указанная в начале файла (var $char_set) по умолчанию, для контента не проставляется.

 

РЕШЕНИЕ

 

Редактируем sources/classes/class_email.php

 

1. Ищем

 

	var $char_set     = 'iso-8859-1';

 

Заменяем на

 

	var $char_set     = 'Windows-1251';

 

2. Ищем

 

  //-----------------------------------------
 // Count.. oh you get the idea
 //-----------------------------------------
 
 if ( count ($this->parts) > 0 )
 {
	 if ( ! $this->html )
	 {
   $this->mail_headers .= "MIME-Version: 1.0\n";
   $this->mail_headers .= "Content-Type: multipart/mixed;\n\tboundary=\"".$this->boundry."\"\n\nThis is a MIME encoded message.\n\n--".$this->boundry;
   $this->mail_headers .= "\nContent-Type: text/plain;\n\tcharset=\"".$this->char_set."\"\nContent-Transfer-Encoding: quoted-printable\n\n".$this->message."\n\n--".$this->boundry;
	 }
	 else
	 {
   $this->mail_headers .= "MIME-Version: 1.0\n";
   $this->mail_headers .= "Content-Type: multipart/mixed;\n\tboundary=\"".$this->boundry."\"\n\nThis is a MIME encoded message.\n\n--".$this->boundry;
   $this->mail_headers .= "\nContent-Type: text/html;\n\tcharset=\"".$this->char_set."\"\nContent-Transfer-Encoding: quoted-printable\n\n".$this->message."\n\n--".$this->boundry;
	 }
	 
	 $this->mail_headers .= $this->build_multipart();
	 
	 $this->message = "";
 }

 

Заменяем на:

 

  //-----------------------------------------
 // Count.. oh you get the idea
 //-----------------------------------------

 $content_type = $this->html ? "text/html" : "text/plain";
 
 if ( count ($this->parts) > 0 )
 {
	 $this->mail_headers .= "MIME-Version: 1.0\n";
	 $this->mail_headers .= "Content-Type: multipart/mixed;\n\tboundary=\"".$this->boundry."\"\n\nThis is a MIME encoded message.\n\n--".$this->boundry;
	 $this->mail_headers .= "\nContent-Type: ".$content_type.";\n\tcharset=\"".$this->char_set."\"\nContent-Transfer-Encoding: quoted-printable\n\n".$this->message."\n\n--".$this->boundry;

	 $this->mail_headers .= $this->build_multipart();
	 
	 $this->message = "";

 } else {

	 $this->mail_headers .= "Content-Type: ".$content_type."; charset=\"".$this->char_set."\"";

 }

 

Наслаждаемся нормальной работой писем.

Ссылка на комментарий
Поделиться на других сайтах

  • 4 недели спустя...
  • 5 месяцев спустя...
  • 4 недели спустя...
if ( $this->html_email )
{
 $this->mail_headers .= "MIME-Version: 1.0\n";
 $this->mail_headers .= "Content-type: text/html; charset=\"".$this->char_set."\"\n";
}else {$this->mail_headers .= "Content-type: text/plain; charset=\"".$this->char_set."\"\n";}

Код то что надо, спасибо автору БОЛЬШОЕ :-)

Я хотя в php не очень врубаю, но код работает классно!!!!

Изменено пользователем fedotpuul
Ссылка на комментарий
Поделиться на других сайтах

  • 11 месяцев спустя...

Сабжи в лангпаке прописаны в кодировке Windows-1251, но при пересылке письма они перекодируются мейлерами и в результате я получаю такую вот СРАМОТУ от крупнейшего форума (конференции) поддержки юзеров IPB:

сБЕДНЛКЕМХЕ НА НРБЕРЮУ МЮ ОНДОХЯЮММСЧ РЕЛС ( IBResource.ru Forums )
Ребята, вам не стыдно рассылать такую порнуху в сабже?

 

Тем не менее, я давно уже обошёл эту проблему найдя и переписав все сабжи конференции. У меня они прописаны в лангпаке (для IPB 2.0.0) и в файлах кода в таком виде:

//-------------------------------
// FORUM: WEEKLY
//-------------------------------
//Еженедельный обзор форума

$lang['subject__digest_forum_weekly'] = "=?windows-1251?B?xebl7eXk5ev87fvpIO7h5+7wIPTu8PPs4A==?=";
$lang['digest_forum_weekly'] = <<<EOF

Привет!

За прошедшую неделю на конференции «<#BOARD_NAME#>»
в форуме "<#NAME#>" были написаны следующие сообщения:

<#CONTENT#>
<#BOARD_ADDRESS#>?showforum=<#FORUM_ID#>

EOF;

 

А на днях был сделан радикальный шаг, который решит И ВАШИ проблемы с вашими Windows-1251 сабжами:

	// ######## BY CARFAX #######
if (strpos($this->subject,"?windows-1251?")===false) {

	/** 
		Тема письма в шаблоне прописана в чистом текстовом виде, а не в base64 
		Конвертируем...
	**/

	// Перекодируем в base64
	$this->subject = base64_encode($this->subject);

	// Добавляем приставки
	$this->subject = "=?windows-1251?B?".$this->subject."?=";
}
// ##########################

 

Этот шаг сделал CARFAX по моей просьбе. Этот код идёт сразу за строкой (IPB 2.0.0 class_email.php)

$this->subject = $this->clean_message($this->subject);

 

 

Юзайте на здоровье.

Ссылка на комментарий
Поделиться на других сайтах

Слишком пафосно, но все равно спасибо.

 

Жаль, что я про это писал уже давно. Юзайте поиск, товарищь, Наблюдатель.

 

Юзайте на здоровье.

Ссылка на комментарий
Поделиться на других сайтах

Поиск привёл в эту тему. Да и зачем (в данном случае) поиск вообще нужен - письма от вас (от конференции) просто вопиют...

Если истина открылась вам давно, а всё остаётся по-прежнему... это называется "безответственность" или как-то ещё? Вписать пару строк в нужное место так сложно? Всего пару строк... Я привёл больше, но они нужны для обхода моей "влобовой" доработки. Для вас актуальны только ДВЕ.

 

Кстати, эта доработка должна идти под номером "два", сразу после доработки чарсета и юзер В ПРИНЦИПЕ не должен искать её - она должна ему навязываться как "необходимое условие" правильной работы конференции. Я говорю о русификации движка. Почему вы ограничиваетесь только лангпаком и чарсетом?

 

...и о вашей компании...

Согласен считаться "товарищь"-ем Верещагина. Ему, как и мне - за Россию обидно. Если уж взялись за это, то будьте любезны ИСПОЛНЯТЬ как положено (хотя бы русификацию). Я не стремлюсь вас обидеть - я правду говорю. Открыто.

Ссылка на комментарий
Поделиться на других сайтах

  • 1 месяц спустя...

А кто-нибудь может подсказать, как решить проблему кодировки писем для форума 1.3.1 Final? В дистрибутиве этой версии в папке sources вообще нет директории classes. Какой файл править и как?

 

Проблема у меня в том, что при получении писем с форума через Outlook Express в поле "От" у меня вот что: тНПСЛ ЯЮИРЮ уНПХЯР.ПС

Ссылка на комментарий
Поделиться на других сайтах

  • 4 месяца спустя...
  • 9 месяцев спустя...
А на днях был сделан радикальный шаг, который решит И ВАШИ проблемы с вашими Windows-1251 сабжами:

Код

// ######## BY CARFAX #######

if (strpos($this->subject,"?windows-1251?")===false) {

 

/**

Тема письма в шаблоне прописана в чистом текстовом виде, а не в base64

Конвертируем...

**/

 

// Перекодируем в base64

$this->subject = base64_encode($this->subject);

 

// Добавляем приставки

$this->subject = "=?windows-1251?B?".$this->subject."?=";

}

// ##########################

 

 

Этот шаг сделал CARFAX по моей просьбе. Этот код идёт сразу за строкой (IPB 2.0.0 class_email.php)

Код

$this->subject = $this->clean_message($this->subject);

 

 

 

Юзайте на здоровье.

 

 

Это именно то что помогло мне исправить стандартную изначальную багу в родном движке 2.3.3. Спасибо огромное Наблюдателю! (менять надо в sources/classes/class_email.php)

 

теперь русскоязычные темы у всех писем с форума абсолютно читабельны любыми почтовыми клиентами!

 

Еще раз спасибо!

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.