Изменение поведения в отношении почты

Внезапно после последнего обновления Discourse начинает отправлять письма с фразой:

«Кто-то ответил на тему, за которой вы следите»,

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

Все говорят, что это очень раздражает.

Так что же произошло и как можно отключить это и вернуть обычное простое поведение? Мне кажется, это было реализовано не очень хорошо, и разработчик даже не удосужился проверить это, ведь слово «following» (следить) написано с лишней заглавной буквы W.

Я думаю, что источник раздражения для участников сообщества Эндрю — это %{header_instructions}.

Этот токен разворачивается в довольно большой блок стандартного текста («не отвечать…», ссылки, инструкции и т. д.), и он появляется в самом начале тела письма во многих шаблонах уведомлений. Для опытных пользователей он доминирует в сообщении и воспринимается как назойливое напоминание, а не как помощь.

В настоящее время не существует настройки на уровне всего сайта для отключения или перемещения этого блока. Чтобы его убрать, администратору нужно вручную отредактировать каждый шаблон письма в разделе Администрирование → Электронная почта → Шаблоны.

В текущей версии latest-release (я использую latest-release +17) должно быть возможно решить эту проблему централизованно с помощью Ruby-скрипта для Rails, который будет обрабатывать шаблоны, уже имеющие переопределения в базе данных, например, удаляя %{header_instructions}, если он появляется в начале тела письма. Эта часть проста и использует модель EmailTemplate.

Применение того же изменения ко всем стандартным шаблонам (включая те, у которых нет существующих переопределений) потребовало бы создания переопределений путем загрузки содержимого шаблонов по умолчанию через внутренние API поиска. Это технически осуществимо, но зависит от внутренней архитектуры Discourse и потребует проверки и утверждения разработчиком-куратором, прежде чем его можно будет рекомендовать широкому кругу пользователей.

Таким образом, коренная проблема заключается не только в содержании %{header_instructions}, но и в том, что это фактически глобальный стандартный текст без переключателя на уровне администратора, а его удаление или перемещение требует ручной работы для каждого шаблона или использования неподдерживаемых скриптов.

@Ethsim2 спасибо, это действительно здорово. Но почему это вдруг изменилось? Я не эксперт в чтении или даже поиске списков изменений.

@Andro да, абсолютно справедливый вопрос.

Часть «внезапно» связана с тем, что %{header_instructions} — это не то, что вы меняли локально: это блок, предоставляемый ядром и внедряемый Discourse в ряд уведомительных писем. Если в ядре изменится формулировка или момент включения этого блока, все заметят это сразу, даже если ни один параметр администратора не был изменён.

Я не хочу делать безосновательных заявлений без ссылки на конкретный коммит, но наиболее вероятная причина — недавнее изменение в ядре, касающееся текста по умолчанию, в который разворачивается %{header_instructions} для уведомлений о отслеживаемых темах (например, добавление строки «Кто-то ответил на тему, которую вы отслеживаете»), либо изменение момента включения этого блока в тело письма.

Как подтвердить, откуда это берётся:

  • В разделе Администрирование → Электронная почта → Настройки почты → Шаблоны просмотрите шаблоны уведомлений, которые получают ваши пользователи (отслеживаемые / отслеживаемые с уведомлениями / ответы / упоминания).
  • Если тело письма начинается с %{header_instructions}, именно этот блок является источником нового вводного текста.
  • Удаление этого блока или перемещение его ниже %{message} / %{context} (или даже %{reply_instructions}) вернёт прежнее «простое» поведение.

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

Если вы используете размещённый Discourse, практическое решение — просто отредактировать небольшой набор шаблонов, которые фактически получают ваши пользователи, а не все шаблоны подряд.

Эти превью были добавлены несколько дней назад

Так что достаточно просто удалить %{email_preview} из шаблонов, чтобы это исправить?

Слово «Watching» часто пишется с заглавной буквы, когда речь идет о конкретной функции Discourse.

Я всегда слежу за появлением интересных тем. Но я слежу за определенными темами в ожидании новых ответов.

А затем «Отслеживание» и т. д., как указано в выпадающем списке статуса уведомления о теме.

Честно говоря, я бы сам этого не понял. Я теперь понимаю, но это немного необычно, в каком-то смысле.

Спасибо, это понятно.

Таким образом, в данном случае внезапное изменение, которое замечает Andro, связано с недавним добавлением %{email_preview} (PR #36657), что объясняет его появление за ночь без каких-либо изменений со стороны администратора.

С точки зрения администратора проблема в обоих случаях схожа: это контент, внедрённый ядром в начало тела письма, и в настоящее время отсутствует глобальный переключатель для его отключения или перемещения. Единственное решение на сегодня — редактирование соответствующих шаблонов писем и удаление или перемещение %{email_preview} (точно так же, как и %{header_instructions}).

Особенно для клиентов на хостинге именно поэтому это кажется резким изменением: значения по умолчанию изменились, но глобального управления, поддерживаемого службой поддержки, нет.

Строки предпросмотра также можно переопределить: вы можете найти конкретную строку или .preview, а затем использовать Ctrl-F для поиска в user_notifications, чтобы найти их.

Из сообщения коммита:

Для HTML-писем текст предпросмотра скрыт с помощью display: none, чтобы
он не отображался в теле письма. В версии письма в формате обычного текста
он будет отображаться в теле письма.

Для каких пользователей появляется это сообщение? Оно не должно появляться.

В моём почтовом клиенте в исходном коде я вижу:

<div class="email-preview" style="display:none"><p>Кто-то отправил вам ЛС.</p></div>

и он скрыт как в Thunderbird, так и в Gmail (веб-версия).

Для справки, вот как новый текст предпросмотра отображается у меня в Outlook для iOS — это не просто фрагмент в папке «Входящие»; он становится первой видимой строкой, связанной с сообщением, именно на это реагируют пользователи.

Это, по-видимому, согласуется с недавним добавлением %{email_preview}: даже если он предназначался как скрытый текст заголовка для HTML-писем, на практике он оказывается хорошо заметным для пользователей (по крайней мере, в некоторых почтовых клиентах или каналах доставки), что и объясняет внезапные жалобы.

Это, вероятно, сделано намеренно, так как в предпросмотре сообщения отображается причина письма. Я бы предположил, что без этого предпросмотр сообщения в целом не был бы полезен?

Это логично, и я согласен с тем, что наличие некоторого содержательного текста превью в целом полезно.

Проблема, на которую реагируют пользователи (по крайней мере в Outlook для iOS и аналогичных клиентах), заключается в том, что этот текст превью не просто влияет на фрагмент во входящих — он визуально воспринимается как часть самого тела сообщения, появляясь перед фактическим содержимым. На практике это кажется повторяющимся и шумным, а не полезным.

Также в текущей формулировке есть определённое противоречие: анонимная формулировка («Кто-то ответил…») полезна с точки зрения конфиденциальности и возможности делиться скриншотами, но в повседневном использовании она менее информативна, чем превью с указанием отправителя, где пользователям в основном нужно знать, кто ответил и требует ли это внимания.

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

Это всё действительно полезно. Но теперь в строке темы, которая раньше содержала [The Jackrail][], больше нет категории. Я хотел бы сохранить исходное поведение.

Также, как я могу узнать, что находится в переменной header_instructions?