Запутался в сообщении об ошибке от ответа по электронной почте

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

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

Сообщение, которое я получаю в этом случае, имеет тему Проблема с электронной почтой – неизвестный адрес в поле “Кому”, а текст выглядит следующим образом:


Извините, но ваше письмо на адрес [“SNIP”] (с темой Re: Помогите, пожалуйста) не было доставлено.

Ни один из адресов назначения не распознан, либо заголовок Message-ID в письме был изменён. Убедитесь, что вы отправляете на правильный адрес электронной почты, предоставленный сотрудниками.


Изменение адреса в поле “От” в моих ответах на адрес, связанный с учётной записью, похоже, решает проблему.

Есть ли простой способ изменить это поведение? Возможно, я что-то неправильно настроил?

(Возможно, стоит сказать, что я бы на самом деле надеялся на возможность полностью игнорировать заголовок “От” и вместо этого использовать ключ ответа, как обсуждалось здесь; есть ли хоть какой-то шанс на это?).

А, возможно, это связано с тем, что это ответ на личное сообщение, а не на публичную тему, и поэтому Discourse считает, что человек, отправляющий электронное письмо (которого система не распознает как действительного пользователя), не должен иметь права отправлять сообщения на этот адрес?

Возможно, именно этим объясняется то, что система помечает адрес в поле «Кому:» как недействительный, а не адрес в поле «От:»?

Тем временем я изменил текст этого сообщения, чтобы уточнить, что проблема может быть связана как с полем «От:», так и с полем «Кому:».

Почему Discourse принимает случайный адрес электронной почты, который не соответствует ни одному действительному аккаунту пользователя на целевом сайте? :thinking:

Для публикации чего-либо в Discourse всегда необходимо иметь действительный, авторизованный аккаунт.

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

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

Можно утверждать, что reply_id (который, похоже, соответствует как теме, так и лицу, отправившему ответ), является достаточным идентификатором, и подделать reply_id сложнее, чем подделать адрес электронной почты, поэтому защита фактически одинаково надежна независимо от того, приходит ли сообщение с правильного адреса.

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

Мой реальный вопрос касается содержания письма об ошибке, которое получают пользователи в таком случае, так как оно может вводить в заблуждение. Реальная проблема, или, по крайней мере, тот аспект, которым человек, получивший письмо об ошибке, может управлять в данной ситуации, — это адрес в поле «От кого» (и адрес, связанный с его аккаунтом), а не адрес в поле «Кому», насколько я понимаю.

В любом случае, у меня уже есть обходное решение:

  • изменение содержания этого сообщения (как здорово, что Discourse так легко настраивается!) и
  • инструктаж пользователей о необходимости изменить адрес электронной почты, если они хотят использовать функцию ответа по электронной почте,

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

Если ответ на это «Нет, всё работает как надо», то это вполне приемлемо.

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

Интересно, @sam и @eviltrout, когда мы немного формализуем это, чтобы пользователи могли добавлять вторичный адрес электронной почты? Стоит ли добавить это в дорожную карту версии 2.5?

Я думаю, нам стоит начать с того, чтобы вывести эту информацию на страницу администратора пользователя, чтобы вы могли просматривать и добавлять адреса электронной почты для версии 2.5. Возможно, следующим шагом будет добавление базового UX в административные страницы для объединения пользователей, теперь что у нас есть хорошо протестированная rake-задача.

Нам нужно будет проверить каждый адрес, верно?

Мне всё ещё трудно понять, почему Discourse доверяет/проверяет заголовок From:, когда его так легко подделать?

Заголовок reply id обеспечивает полезную проверку, так как злоумышленники не могут его угадать или узнать.

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

Электронная почта — это идентификатор. «Другой адрес электронной почты» — это всё равно что сказать «другая ДНК».

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

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

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

К сожалению, я не знаю, решит ли предлагаемая функция проблему, с которой столкнулся мой экземпляр Discourse.

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

Когда она отвечала по электронной почте, она часто делала это с «неправильного» адреса, из-за чего её ответы отклонялись.

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

Разве нельзя просто объединить учётные записи, сделав один из адресов электронной почты вторичным?

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

Технически я мог бы это сделать, но намеренно предусмотрено, чтобы пользователь мог публиковать сообщения от двух разных имён (личное / от имени гражданского общества).

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

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

У меня есть рабочие алиасы в корпоративной почте, но клиент сопоставляет адрес «от» для ответов с адресом, на который было отправлено письмо…

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

Чтобы создать две учётные записи Discourse, мы использовали трюк с точками в Gmail, чтобы она могла создать два адреса электронной почты для своего почтового ящика Gmail и тем самым создать две учётные записи в Discourse.

Когда она отвечает на сообщение форума по электронной почте, Gmail не всегда использует тот же вариант адреса электронной почты, который ожидает Discourse.

По моему мнению, при условии, что идентификатор ответа действителен, Discourse должен принимать ответ.

«Дот-хак» крайне ненадёжен, и, скорее всего, с использованием псевдонимов через «плюс» всё работало бы намного лучше.

Если оба аккаунта используют адреса с «плюсом», а ни один не привязан к базовому адресу, переключатель адреса «От:» будет работать корректно, и если забыть его настроить, письмо просто будет отклонено, а не отправлено с неверного аккаунта.

Использование «плюса» вместо точек также значительно упрощает работу фильтров :sweat_smile:

@dan, не могли бы вы добавить это в свой список?

Я отправил pull request для улучшения поддержки нескольких адресов электронной почты: