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

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


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

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)

 

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

 

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

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

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

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

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

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

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

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

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