Форум русской поддержки Joomla!® CMS
05.12.2016, 04:32:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Стандарты email рассылок и работа Jcomments

 (Прочитано 2766 раз)
0 Пользователей и 1 Гость смотрят эту тему.
dimetrius
Осваиваюсь на форуме
***

Репутация: +7/-1
Offline Offline

Пол: Мужской
Сообщений: 148



« : 14.10.2013, 23:34:01 »

Ну и снова добрый день  Wink
Начну немного из далека...
Решил настроить DKIM подпись писем своего домена, для этого используется postfix + opendkim.
Всё как бы хорошо, работает, подписывается, но иногда приходят письма, у которых
в яндексе: dkim=fail
у mail.ru: dkim=fail reason=bodyhash_mismatch
начал думать что же не так...
Заметил что письма, которые не проходят проверку, содержат в себе где-то посреди какого-то слова вот такие значки:
Код:
� �
ну например вот так
Код:
Lorem Ipsum в 60-х годах и, в боле� � недавнее время

А вот исходный код, который показывает нам яндекс:
Показать текстовый блок
Посмотрите на строку, которая начинается на <div style="border:, а особенно как она заканчивается и начинается следующая.
И ещё одно, она обрезана ровно после 1000 символа.

В общем выходит так... postfix отдаёт opendkim письмо для подписи, потом его проверяет и если есть строки длиною больше 1000 символов принудительно создаёт перенос на новую строку. Причём если это английский текст, то никаких проблем не возникает, т.к. лишних символов нет, а вот если текст русский в UTF-8 допустим, то количество символов при этом меняется и письмо, которое отправляет postfix уже после обрезания становится уже не валидно подписанное DKIM. В связи с чем все почтовые сервисы и твердят нам что подпись не верна.
------------------
Вернёмся к нашей 1000 символов и при чём здесь Jcomments...

Вот ссылка, по которой расписаны некоторые требования http://www.faqs.org/rfcs/rfc821.html
Выписка
Цитировать
text line

               The maximum total length of a text line including the
               <CRLF> is 1000 characters (but not counting the leading
               dot duplicated for transparency).
Из чего следует что в email длина строки не должна превышать 998 символов, а лучше не более 988, т.к. некоторые обрезают не на 1000, а на 990. Пишу на 2 меньше, потому что в любом случае есть ещё вот эти CRLF, хз что это  Grin

В общем очень-очень прошу Смарта следить за этим именно в Jcomments, т.к. больше некому.
Ну и мнение тоже интересно.
Прошу строго не судить, может в чём-то не прав, или что не совсем верно описал, но суть должна быть ясна.
Записан
dimetrius
Осваиваюсь на форуме
***

Репутация: +7/-1
Offline Offline

Пол: Мужской
Сообщений: 148



« Ответ #1 : 14.10.2013, 23:42:12 »

Эти же значки раньше наблюдались и без DKIM подписи, но тогда они просто напрягали глаз, а сейчас могут повлиять на не доставку сообщений пользователям сайта.
Записан
smart
Администратор
*******

Репутация: +1308/-14
Offline Offline

Пол: Мужской
Сообщений: 6850


снова дома...


« Ответ #2 : 15.10.2013, 11:14:48 »

Хм, информация интересная, сделать заплатку для этого можно. Но еще интереснее другое - откуда такая кривая коррекция длины строки. На этот вопрос легко ответить если посмотреть код в файле:

/libraries/phpmailer/smtp.php

Теперь о том, как это исправить (привожу код для JComments 3.0):

1. Открываем файл /components/com_jcomments/helpers/notification.php
2. Находим строчку:
Код
return $tmpl->renderTemplate($templateName);
заменяем на:
Код
			$text = $tmpl->renderTemplate($templateName);
$max_line_length = 998;
$lines = explode("\n", $text);
$body = array();
 
foreach($lines as $line) {
$line = trim($line);
if (JString::strlen($line) > $max_line_length) {
$pos = JString::strrpos(JString::substr($line, 0, $max_line_length), ' ');
$body[] = JString::substr($line, 0, $pos);
$body[] = JString::substr($line, $pos, JString::strlen($line));
} else {
$body[] = $line;
}
}
 
return implode("\r\n", $body);

Этого должно быть вполне достаточно. Буду благодарен, если вы протестируете и отпишитесь о результатах.
Записан
dimetrius
Осваиваюсь на форуме
***

Репутация: +7/-1
Offline Offline

Пол: Мужской
Сообщений: 148



« Ответ #3 : 15.10.2013, 14:09:20 »

Вот такая штука получается:
Показать текстовый блок
Что-то не учитывается...
Записан
smart
Администратор
*******

Репутация: +1308/-14
Offline Offline

Пол: Мужской
Сообщений: 6850


снова дома...


« Ответ #4 : 15.10.2013, 14:39:03 »

Хм, странно. Может быть это то письмо, что было в очереди на отправку еще до того, как вы внесли изменения?
Записан
dimetrius
Осваиваюсь на форуме
***

Репутация: +7/-1
Offline Offline

Пол: Мужской
Сообщений: 148



« Ответ #5 : 15.10.2013, 18:47:24 »

Так там же в коде есть переносы без этих значков, а есть со значками...
Скорее всего без значков делались именно с помощью Jcomments, а со значками почтовым сервером.
Записан
smart
Администратор
*******

Репутация: +1308/-14
Offline Offline

Пол: Мужской
Сообщений: 6850


снова дома...


« Ответ #6 : 15.10.2013, 18:54:30 »

Ну давайте ради эксперимента в моем патче поменяем 998, допустим на 700? Так сказать с запасом и посмотрим...
Записан
dimetrius
Осваиваюсь на форуме
***

Репутация: +7/-1
Offline Offline

Пол: Мужской
Сообщений: 148



« Ответ #7 : 15.10.2013, 22:09:25 »

Уже 170 поставил, всё равно получаем вот что
Показать текстовый блок
Сначала вношу изменения в файл, потом оставляю комментарий к теме, на которую подписан ящик.
-----------------
Вот ещё...
В настройках Joomla для отправки почты у меня стоит PHP Mail, на Sendmail ситуация полностью идентичная. А вот на SMTP строки корректно разбиваются. Вероятно это именно то, что вы заметили выше, о файле /libraries/phpmailer/smtp.php
Но эти изменения производятся не Jcomments, а именно Joomla и только если использовать SMTP.
Хотелось бы всё таки не ограничиваться.
« Последнее редактирование: 15.10.2013, 23:20:32 от dimetrius » Записан
smart
Администратор
*******

Репутация: +1308/-14
Offline Offline

Пол: Мужской
Сообщений: 6850


снова дома...


« Ответ #8 : 16.10.2013, 12:03:55 »

Не совсем понимаю, как такое может быть, ведь мы режем текст сообщения еще до того, как он попадает куда-либо, и строки по длине заведомо меньше, чем 1000 символов.
Записан
dimetrius
Осваиваюсь на форуме
***

Репутация: +7/-1
Offline Offline

Пол: Мужской
Сообщений: 148



« Ответ #9 : 16.10.2013, 12:47:30 »

smart, попробуйте у себя, или могу дать доступ к сайту.
Записан
Lukigrad
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 3


« Ответ #10 : 30.04.2015, 21:34:29 »

У нас примерно похожая ситуация. Но символы в тексте письма не особо смущают, проблема несколько в другом - режется адрес ссылки в итоге на почту приходит совсем не рабочая ссылка. Например (для адреса справки для примера взят адрес форума):
Вот дословный текст комментария
Код:
Доброго. Ваш дед, рядовой 1192 СП, был ранен осколком и умер в расположении 356 ХППГ. Об этом имеются записи в Книге умерших этого госпиталя и в Книге погребения. Но там он учтён как Урынцев.
Ссылки на документы
http://obd-memorial.ru/memorial/fullimage?id=33030954&id1=abaf68aa888f15e85425566c84e0b421&path=Ekt/001/356_КП/00000010.jpg
http://obd-memorial.ru/memorial/fullimage?id=55953419&id1=45da0f5a8d153780c5762ced441962e6&path=Z/004/058-А-0083627-1094/00000055.jpg

Касательно исправления фамилии в паспорте и на стеле Вам необходимо обратится в военкомат (адрес у нас в справке http://joomlaforum.ru/ ). В список на сайте я внесу фамилию в скобках.

В теле письма код выглядит так:
Код:
<div style="border: 1px solid #ccc; padding: 10px 5px; margin: 5px 0; font: normal 1em Verdana, Arial, Sans-Serif;">Доброго. Ваш дед, рядовой 1192 СП, был ранен осколком и умер в расположении 356 ХППГ. Об этом имеются записи в Книге умерших этого госпиталя и в Книге погребения. Но там он учтён как Урынцев.<br />Ссылки на документы<br />http://obd-memorial.ru/memorial/fullimage?id=33030954&id1=abaf68aa888f15e85425566c84e0b421&path=Ekt/001/356_КП/00000010.jpg<br />http://obd-memorial.ru/memorial/fullimage?id=55953419&id1=45da0f5a8d153780c5762ced441962e6&path=Z/004/058-А-0083627-1094/00000055.jpg<br /><br />Касательно исправления фамилии в паспорте и на стеле Вам необходимо обратится в военкомат (адрес у нас в справке http://joomlaf
 orum.ru/ ). В список на сайте я внесу фамилию в скобках.</div>
Быстрая модерация <a href="....
т.е. в коде идёт перенос на новую строку без всяких тегов и появляется символ "пробел", при этом почтовой службой это воспринимается как два разных участка текста, а не единая ссылка. В Word'е этот символ определяется как Shift+Enter, т.е. абзац не заканчивается — заканчивается лишь строка абзаца.

Joomla 2.5.28
JComments 3.0.5
В версии JComments 2.3.0 ситуация аналогична, собственно в ней и заметили, обновили до 3.0.5, проблема осталась. Описанный способ с файлом notification.php не помог. Изменение параметра "Разбивать длинные слова" не помогает. Если судить по коду письма, то с предыдущего переноса строки обрезка происходит на 739 знаке (включая пробелы)
Записан
dimetrius
Осваиваюсь на форуме
***

Репутация: +7/-1
Offline Offline

Пол: Мужской
Сообщений: 148



« Ответ #11 : 30.04.2015, 23:58:16 »

Lukigrad, я тогда нашёл способ. Выбираем в настройках email "использовать smtp сервер" и будет порядок.
Записан
Lukigrad
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 3


« Ответ #12 : 01.05.2015, 09:02:19 »

dimetrius, большое спасибо, всё заработало как надо!
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet