Неверное сообщение об ошибке для слишком коротких ответов в Reply-by-Email

При отправке слишком короткого ответа, например «тестовый ответ по электронной почте», я получаю обратное письмо:

Извините, но ваше письмо на адрес [“discoursereplies+redacted.org”] (с темой Re: заголовок темы форума) не было доставлено.

Используете ли вы более одного адреса электронной почты? Отвечали ли вы с другого адреса? При ответе по электронной почте необходимо использовать тот же адрес. Также возможно, что заголовок Message-ID в письме был изменён.

Однако более длинные ответы, состоящие из нескольких строк и предложений, проходят успешно.

Сообщение об ошибке в данном случае некорректно.

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

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

Похоже на Confused by Error Message From Reply-by-Email, но это другая проблема.

Хм, можем ли мы воспроизвести это, @tshenry?

Сразу воспроизвести не удалось.

Я протестировал на https://try.discourse.org, где параметр сайта min post length установлен по умолчанию в 20.

Я создал новую тему от имени пользователя A, а затем ответил на неё от имени пользователя B. Пользователь A получил письмо, и я отправил однословный ответ «Test» по электронной почте:

Сразу после этого я получил письмо с соответствующим сообщением:

@adrelanos, вы можете предоставить дополнительные шаги для воспроизведения? Возможно, сообщение, которое вы получили, каким-то образом было валидным? Также подтвердите, пожалуйста, что вы используете последнюю версию Discourse.

Стабильная ветка. 2.6.6 (Не ветка с завершёнными тестами). Имеет ли это значение?

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

Помимо этого, у меня возникли следующие вопросы:

Поскольку мне не удаётся воспроизвести проблему при выполнении стандартного сценария, мне потребуется немного больше информации.

Ранее у меня возникали проблемы: PostgreSQL 13 update, Restore problem: relation "theme_fields" does not exist и How to backup and restore a whole /var/discourse app folder? - #15 by adrelanos. Сейчас я очень доволен тем, что мне предоставили более медленную стабильную ветку. :slight_smile:

Думаю, вы используете версию 2.7. Буду ждать, пока 2.7 будет перенесена в стабильную ветку, и затем отчитаюсь.

Можете ли вы предоставить дополнительные шаги для воспроизведения проблемы?

Параметр min post length установлен в 2.

Параметр delete rejected email after days по-прежнему имеет значение по умолчанию 90.

Ответ «OK» на собственное сообщение теперь работает корректно.

При ответе «OK» на сообщение другого пользователя я получаю сообщение.

Нам жаль, но ваше письмо на адрес [“discoursereplies+redacted@redacted.redacted”] (с темой Re: [redacted] [redacted] redacted) не было обработано.

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

Однако сообщение было отправлено всего около 5 минут назад.

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

Возможно, полученное вами сообщение каким-то образом было валидным?

Что вы имеете в виду под «валидным»?

Это означает, что на вашем сервере или в установке что-то не так? Это стандартная установка по умолчанию?

Это подразумевает, что на вашем сервере некорректные часы или проблема с установкой?

Думаю, что нет. Только что проверил. Время на локальном компьютере и на сервере совпадало по дате, часу и минуте в UTC. Почти даже по секундам (трудно измерить через SSH).

Это стандартная установка по умолчанию?

Да. Метод установки через Docker. Не хотелось бы отклоняться от рекомендаций.

Спасибо за поддержку Discourse!

Итак, для будущего краткое резюме:

  1. Проблема в OP заключалась в том, что вы отправили слишком короткий ответ и получили ошибку «bad destination address» вместо ответа «post too short». Следующее утверждение не могло быть верным:

    Используете ли вы более одного адреса электронной почты? Отвечали ли вы с другого адреса? Ответы по электронной почте требуют использования того же адреса при ответе. Кроме того, заголовок Message-ID в письме мог быть изменён.

  2. В другом примере вы отправили слишком короткий ответ пользователю и получили ошибку «old destination»: «Мы принимаем ответы на исходные уведомления только в течение 90 дней. Пожалуйста, перейдите к теме, чтобы продолжить обсуждение». Это также не могло быть верным, так как пост, на который вы отвечали, был опубликован всего 5 минут назад.

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

Звучит отлично! Мне было бы очень интересно узнать, поможет ли обновление прояснить ситуацию. Дайте нам знать, если это не сработает.

Тейлор через Discourse Meta:

Это звучит точно?

Да.

В версии 2.7.3 этого больше нет, но теперь возникает следующая проблема.

  1. Используете ли вы более одного адреса электронной почты? Отвечали ли вы с другого адреса? При ответе на электронное письмо необходимо использовать тот же адрес. Кроме того, заголовок Message-ID в письме мог быть изменён.

Похоже, это происходит, если после публикации, на которую я отвечаю, были сделаны другие ответы.

Поскольку отладка этого кажется сложной (ошибка пользователя — ответ на адрес From вместо Reply-To, хотя в данном случае я так не делал; проблемы на почтовом сервере; либо баг в Discourse), я предложил следующую функцию для упрощения отладки:
Reply with debug info to rejected e-mails

Это означает, что вы столкнулись с одним из других механизмов защиты от коротких сообщений, например, body min entropy, который предназначен для блокировки постов вроде AAAAAAAAAAAAAAAAAAAAAAAAAAAA и не имеет пользовательского сообщения об ошибке.

Есть ли у вас конкретные шаги для воспроизведения? Можете ли вы воспроизвести ошибку в 100% случаев?

Это случай для Reply with debug info to rejected e-mails

Не всегда воспроизводимо. Я сейчас буду часто использовать ответ по электронной почте и надеюсь, что смогу предоставить воспроизводимые инструкции.
Возможно, требуется несколько ответов, чтобы письмо было отклонено. Или это зависит от времени. Однако старые сообщения с большей вероятностью будут отклонены, хотя параметр disallow reply by email after days уже установлен в 0.