Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

Поле От/From в отправляемых форумом письмах

Добрый день!

 

Столкнулся с проблемой при переходе на английскую версию форума. Теперь в письмах, отправляемых с сайта, в поле От/From не подставляется название сайта, а указывается только e-mail, указанный в настройках.

 

IPS ответили, что типа очень много серверов не понимают такие заголовки, поэтому они просто вырезают в этом случае название сайта :( Но, хотелось бы все-таки, чтобы название сайта присутствовало, благо все нормальные сервера понимают и UTF-8... Более того, в версии от IBR название указывается и нормально кодируется в UTF-8.

 

Кто может подсказать, где и что нужно подправить?

 

Ответ от IPS:

It's because the board name is in UTF-8.. We used to allow it, but, have found more and more that email servers have problems with the encoding of the characters, and will wind up not sending the mail at all. So, we don't encode it, and, if it's a UTF-8 character, that generally means it won't go through.

 

Right now, there is no way around it. Other than using only standard latin characters in the board name.

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

О какой версии речь?

 

В 3.2.0 и 3.1.4 никакой чистки от не-unicode не нашел (только что просмотрел).

  • Автор

3.2.1. Да даже с этого форума письма приходят просто с адреса ***@ipbskins.ru без указания названия сайта...

Пойду скачаю и посмотрю, что там в 3.2.1 сделали.

 

В любом случае, думаю, можно без тени сомнения взять файл /admin/sources/handlers/han_email.php из 3.2.0 и заменить им новый из 3.2.1. Скорее всего все заработает без каких-либо проблем. Точнее скажу, когда посмотрю код из 3.2.1.

  • Автор

Стоп, а что, в 3.2.0 письма приходят с нормальным имени сайта в отправителе? Я-то думал это ИБР что-то подкрутили, раз и здесь тоже есть такие же проблемы...

 

Просто версия от ИБР у меня только 3.1.4.

 

Спасибо за подсказку про файл, хоть буду знать, что смотреть, может и сам что найду.

 

Пример строчки из заголовка письма от 3.1.4 ИБР

 

From: "=?UTF-8?B?0JrQu9GD0LEg0KHRgtGD0LTQtdC90YLQvtCyINC4INCc0L7Qu9C+0LTQtdC20LggItCd0LDRiCDQo9C90LjQstC10YAi?=" <forum@nashuniver.ru>

 

Пример строчки из заголовка письма от 3.2.1 IPS

 

From: <forum@nashuniver.ru>

Изменено пользователем Bonov

Упс, был не прав. Все сложнее, можно ничего не менять - все равно не поможет :)

  • Автор

Упс, был не прав. Все сложнее, можно ничего не менять - все равно не поможет :)

Хоть и с улыбкой, но не оптимистичный ответ :)

Различия-то хоть в этом файле искать? Или где-то еще глубже?

В файле /ips_kernel/classEmail.php:

 

Обратите внимание

Код в данном посте немного поврежден парсером IPB (ну не любит он всякие заковыристые сочетания ковычек), поэтому двумя постами ниже в аттаче лежат ПРАВИЛЬНЫЕ куски кода. Забирайте их оттуда :)

 

Строки:

	$this->from			= $this->_cleanEmail( $email );
	$this->from_display	= $display;

 

Заменяете на:

	$this->from			= $this->_cleanEmail( $email );
	$from = str_replace( '"', '"', $display );
	$from = str_replace( ''', "'", $from );
	$from = str_replace( ''' , "'", $from );
	$from = str_replace( '!' , "!", $from );
	$from = str_replace( '$' , "$", $from );
	if( $this->mail_method != 'smtp'  AND $from !== '' )
	{
		$fheader	= $this->_encodeHeaders( array( 'FDispay' => $from ) );
		$from		= $fheader['FDispay'];
		unset($this->mail_headers['FDispay']);
	}
	$this->from_display		= $from;

 

Кириллица энкодится, поэтому фильтр на нее далее не срабатывает.

 

И еще:

 

			//-----------------------------------------
		// We don't want to keep subject in the
		// headers for php mail
		//-----------------------------------------		

		if( $this->mail_method != 'smtp' AND $header == 'Subject' )
		{
			unset($this->mail_headers[ $header ]);
		}

 

заменить на:

		if( $header == 'Subject' OR $header == 'FDispay' )
		{
			$val= '=?' .$this->char_set .'?B?' .base64_encode($orig_value) .'?=';

			if( !count($headers) )
			{
				$this->mail_headers[ $header ] = $val;
			}
			else
			{
				$enc_headers[ $header ] = $val;
			}

			continue;
		}

 

Можно потестировать здесь на ipbskins - работает, отправитель появился.

  • Автор

@Ritsuka, спасибо огромное!

 

С первым участком кода все понятно, а зачем второй?

Второй собственно энкодит From и Subject в base64, во избежание проблем с кириллицей.

  • 2 недели спустя...
  • Автор

Строки кода выше отображаются не правильно, поэтому для интересующихся прилагаю туже самую инструкцию, но в отдельном текстовом файле.

 

Поле ОТ в отправляемых письмах.txt

  • 1 год спустя...

хух... ребята. кому эти фиксы не помогли на 3.2, вот мой дополнительный :)

 

$display = "=?UTF-8?B?" . base64_encode($display) . "?=";
$this->from			= $this->_cleanEmail( $email );

 

добавить первую строчку из цитаты выше в функцию setFrom

  • 4 года спустя...

В файле /ips_kernel/classEmail.php:

Посмотрел этот файл - все эти правки уже имеются. Вообще то почта с POP отсылается нормально, заголовок ОТ есть. Проблема с SMTP - заголовка нет.

Посмотрел этот файл - все эти правки уже имеются. Вообще то почта с POP отсылается нормально, заголовок ОТ есть. Проблема с SMTP - заголовка нет.

Нет или что-то другое?

12 пост читали?

Нет или что-то другое?

В смысле вместо заголовка название форума - имя емейла.

 

12 пост читали?

Там на 3.2, у меня 3.1.4 - такой фикс пойдёт на мою версию?

Там на 3.2, у меня 3.1.4 - такой фикс пойдёт на мою версию?

 

Там 1 дополнительная строчка кода, который к версии не имеет отношения.

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.