`enable_forwarded_emails` doesn't behave like conventional email forwarding

enable_forwarded_emails is a great feature for bringing existing conversations into Discourse, but for users who approach Discourse with a “Mailman-mind” - as many users on our instance do - this feature just doesn’t do what they’re expecting it to.

Within every email client I’ve used, forwarding an email intentionally excludes the original email address from the forward, and subsequent replies. Whereas with this feature, that original email address is included in the created post and subsequent replies.

If this feature isn’t enabled, then Discourse strips the actual forwarded email, which also doesn’t work for us.

My thought is there should be an alternative feature which doesn’t strip the forwarded email and posts it like so:

Thought you all should see this:

---------- Forwarded message ---------
From: Example Person <person@example.com>
Date: Wed, 13 Mar 2019 at 15:11
Subject: An email to be forwarded
To: <some_discourse_user@example.com>

The original email

This would be a lot like the result of the always_show_trimmed_content setting, but with the trimmed content automatically expanded (and therefore visible in email notifications).

@zogstrip what are your thoughts here?

With just a little bit of rejigging of the code you’ve already written for enable_forwarded_emails I think what I want to see would be relatively easy - and that’s rejigging I’m happy to do.

Perhaps the solution here is to create a new multiple-choice site setting, something like:

forwarded_emails_behaviour:

  • hide (default)
  • show (the behaviour I’m advocating for here)
  • create_replies (the existing enable_forwarded_emails behaviour)
9 лайков

I like that :+1:

PR at will :wink:

5 лайков

Мне потребовалось немного времени, но вот PR:

8 лайков

В настоящее время у этого параметра доступны следующие опции:

Получается, что опция “показать” стала “цитировать”?

Также я не совсем понимаю, почему другая опция называется “создать ответы”. Что это означает? (или: что она делает?)

Да, поскольку обе другие опции тоже «показывают» пересланное письмо, но эта цитирует его в исходном сообщении.

Всё как написано на :canned_food:! Она попытается разобрать пересланное письмо, затем создаст временного пользователя от имени оригинального отправителя пересланного письма и опубликует пересланное письмо как исходную тему, а затем любой текст, который включил пересылающий, — как ответ на эту тему (по крайней мере, так я помню, как это работало).

4 лайка

Ах, теперь я понял. Это текст, который пересылающий включает, и он становится ответом! Но это всего лишь один ответ. Почему же сказано создать ответы?

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

  • скрыть пересланное письмо
  • процитировать пересланное письмо
  • опубликовать пересланное письмо с ответами

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

3 лайка

Итак, я использую настройку цитирования, и она определённо не работает так, как описано. Возможно, я всё ещё неправильно понимаю предполагаемое поведение, но это выглядит довольно ясно:

а это не то, что я получаю. Так что позвольте мне быть более точным в том, что я получаю: кто-то переслал письмо, начинающееся с короткой заметки вроде «Посмотрите на это», за которой следовало пересланное письмо. Пересланное письмо содержало текст, а также два вложенных файла PDF. Пост, показанный на форуме, выглядел так:

Посмотрите на это!
С уважением,
Сара

document1.pdf
document2.pdf

Вот и всё.

Итак, пересланное письмо было полностью удалено, за исключением вложений. Мне удалось восстановить его вручную, и оно даже начиналось с ---------- Пересланное сообщение ---------, так что его идентификация не могла быть проще…

Хм, интересно, не мешают ли здесь вложения. Вот как они (правильно) отображаются у меня: https://discourse-dev.itsre-apps.mozit.cloud/t/fwd-email-to-site-feedback-support/24

3 лайка

Хорошо, это выглядит именно так, как я и ожидал. Приятно видеть, что это работает хотя бы в определённых случаях. Но было ли в вашем письме вложение? Если нет, то вполне вероятно, что Discourse путается из-за (некоторых?) вложений.

У меня всё ещё возникают проблемы с отображением пересланных писем. Поскольку у меня есть хотя бы одно письмо с вложениями, которое было отрисовано корректно, я предполагаю, что проблема связана с тем, добавил ли пересылающий что-либо в письмо или нет. Судя по моим наблюдениям, письма, пересланные без добавления текста выше пересылаемого сообщения, отображаются правильно, но если пересылающий добавил что-то вроде «FYI» (для информации), то в посте включаются только вложения, но не текст пересланного письма.

Иными словами, этот пример всё ещё не работает (поскольку он включает фразу «Думал, вам всем стоит это увидеть»):

Вместо вышеуказанного результата это письмо будет отображено так:

Думал, вам всем стоит это увидеть:

И больше ничего.

Может ли кто-нибудь подтвердить, является ли эта проблема специфичной для моего экземпляра или она существует и в других местах?

Пожалуйста, проверьте особенно письма с вложениями (например, PDF-файлом), так как возможно, что проблема возникает только тогда, когда добавлен текст И присутствует вложение.

Я тоже до сих пор не понимаю, что делают эти различные метки и функции. Пытаюсь настроить входящую электронную почту для использования с плагином «Тикеты» :tickets:, но сталкиваюсь с непоследовательным поведением.

Мне кажется, что поведение по умолчанию должно быть таким: всё, что пересылается, становится постом от имени (временного или обычного) пользователя, создавшего сообщение. Причина пересылки чаще всего заключается в том, что получатель сообщения решил, что вопрос лучше обсудить на Discourse, поэтому тему логичнее было бы начать автору письма, а не тому, кто его переслал.

(Но, возможно, мои сценарии использования на самом деле являются частными случаями…)

Это должно работать именно так, когда вы устанавливаете enable_forwarded_emails в create_replies. Пересланное письмо станет первым сообщением, и если пересылающий написал текст, будет создана ответная запись. В противном случае будет создана небольшая запись действия, чтобы было понятно, кто переслал первое сообщение.

2 лайка

Ладно, я думаю, что наконец-то начинаю понимать:

Если в настройке сайта forwarded emails behaviour выбрано значение create_replies, то исходное сообщение становится первым постом в теме, а всё, что написано в письме выше пересланного сообщения, становится ответом на тему под сообщением третьей стороны. :confused:

Вопрос: Обрабатывают ли другие значения этой настройки сайта — а именно hide или quote — только исходное сообщение третьей стороны и ничего больше?

Мне интересно, не является ли попытка разделения этих «созданных ответов» причиной некоторых странных ошибок, которые я наблюдаю при отправке данных из клиента Microsoft Outlook.

P.S.: Интересно, стоит ли добавить эту настройку в раздел FAQ/инструкции, на который можно было бы ссылаться из описательного текста ниже самой настройки? Возможно, это только я, но за последние 7 лет я редко бывал так сбит с толку настройкой Discourse. Или мне просто нужно больше :coffee: :smile:

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

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

Работа должна стать значительно лучше, когда письма пересылаются как вложение, а не внутри сообщения (я на 99% уверен, что Discourse это поддерживает).

1 лайк

Я согласен, что это гораздо более чистый способ обеспечить корректную обработку. Интересно, почему у меня не получается заставить Discourse обрабатывать вложения, когда я это делаю. (Содержимое пересланного вложения попадает в необработанное содержимое, помеченное для поста, но отображается только «комментарий», а не пересланное оригинальное сообщение. Снова же, по крайней мере для MS Outlook; мне придётся попробовать другие клиенты.)

1 лайк

Возможно, это всё-таки не реализовано? Я ещё не смотрел код. :blush:
Сообщите, пожалуйста, если это работает с другими клиентами.

1 лайк

Сообщения, пересылаемые внутри (inline), обрезаются при включённых режимах quote и create_replies.

Есть какие-нибудь предложения?

Оригинальное сообщение (некоторые заголовки удалены):

From: Jeffrey Lastname <jeff@myemail.us>
To: test-cat@example.org
Subject: Fwd: Thank you for your support!
X-Mailer: MailMate (1.14r5745)
Content-Type: text/plain; format=flowed

Some really long sample text.

Forwarded message:

> From: Donations Team <giving@example2.org>
> To: jeff@myemail.us
> Subject: Thank you for your support!
>
> Dear Jeffrey,
>
> Our heartfelt thanks for your donation to Example Project, 
> especially now. Together we will write the future.

Сообщение на форуме (одинаково для обоих режимов):

Some really long sample text.

Forwarded message:

Пересылка сообщения в виде вложения также не работает. Вложения в формате eml отклоняются. Если вложения eml разрешены, то в режиме “create_replies” к сообщению прикрепляется файл eml, и посетитель форума получает возможность его скачать.

Можно ли настроить уведомления по электронной почте так, чтобы в них отображалось пересланное сообщение?

При

  • параметре forwarded_emails_behaviour, установленном в значение “quote”, и
  • параметре always_show_trimmed_content, включённом вкл,

наш сайт Discourse (версия 2.6.0, стабильная) показывает пересланное письмо именно так, как хотелось бы, после нажатия на три точки:

Однако в уведомлении по электронной почте пересланное сообщение полностью отсутствует:

1 лайк