Уведомления несовместимы с ответом по электронной почте

Я внимательно изучил руководства по электронной почте по этой ссылке Email delivery configuration checklist и следующим.

Я также изучил эту ссылку How to setup "Reply by email address" now that it must be different from the "Notification email" и эту Notification email cannot be the same as reply by email.

Все адреса, которые я использую на форуме, могут отправлять и получать письма через почтовый клиент, такой как Thunderbird или Claws Mail.

Имеется четыре различных адреса, но в данном вопросе затрагиваются только первые три:

  • адрес администратора в app.yml: admin@
  • адрес уведомлений в app.yml: forum@
  • адрес для ответа (reply-to): reply@
  • и адрес для публикации через email: questions@
  1. Уведомления, получаемые через статус рассылки форума, отправляются корректно. Тест отправки со страницы admin/email/server-settings также проходит успешно.

  2. Если я включаю функцию ответа по электронной почте, она работает корректно, но уведомления перестают функционировать.

Предыдущий тест отправки теперь завершается ошибкой со статусом «501 5.5.4 Вам не разрешено отправлять с этого адреса».

  1. Если я отключаю ответ по электронной почте, тест снова проходит успешно.

Кто сможет объяснить, почему возникает эта ошибка, и как правильно настроить одновременно и уведомления, и функцию «ответ по электронной почте»?

Это сообщение от вашего сервиса отправки почты. Оно довольно понятное.

Вам нужно отправлять с адреса электронной почты, который разрешён вашему SMTP-серверу. Скорее всего, сервер настроен на отправку с домена example.com, а вы пытаетесь отправить с форума.example.com.

Почему в одном случае тест отправки проходит успешно, а при включении «ответа по электронной почте» он не проходит? Уточню, что я не меняю конфигурацию уведомлений.

Что происходит на уровне Discourse при подготовке писем?

Проблема действительно исходит от Discourse.

Уточнив настройки логирования, я вижу, что отправленное сообщение успешно аутентифицировано по правильному адресу:

2026-02-25T12:54:24Z TRACE Data store
iteration operation (store.data-iterate) elapsed = 0ms
<3.14, remotePort = 47104, accountName =
"forum.cagut@domain.tld", accountId = 31

Однако далее появляется запись:

2026-02-25T12:54:24Z ^[[35;1mTRACE ^[[37;1mRaw SMTP output sent
(smtp.raw-output) listenerId = "submissions", localPort = 465, remoteIp
= 51.178.53.14, ^>
<53.14, remotePort = 47104, size = 73,
contents = "MAIL
FROM:<reply.cagut+verp-8bf40c695b1f612e555cf25f3c14c9b8@domain.tld>\r\n"

Почтовый сервер не имеет никаких сведений о таком формате адреса.

Это магическое число позволяет Discourse связывать ответы с темой.

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

Да, я знаю, что это идентификатор для использования функции «ответ по электронной почте».

Поэтому тест отправки писем не работает, когда включена функция «ответ по…». В документации об этом не сказано, и ошибка возникает именно в Discourse, а не на почтовом сервере, что вы и указали в своём первом ответе!

Кстати, как адрес «from» может содержать это «магическое число»? Этот формат адреса используется в заголовках. Ваш ответ вообще не является ответом.

Такая трансформация поля «From» не должна выполняться.

И утверждать, что нужно отказаться от функции, предусмотренной программным обеспечением, — это странно…

Завтра я проведу дополнительные исследования.

Речь не идёт о преобразововании заголовка как такового. Когда включена функция «ответ по электронной почте», Discourse отправляет письмо с адресом в поле envelope-from, соответствующим шаблону reply_by_email_address, а также устанавливает заголовок Reply-To:, если письмо можно использовать для ответа.

Например, здесь, на meta, это выглядит так:

notification_email: notifications@meta.discoursemail.com
reply_by_email_address: incoming+%{reply_key}@meta.discoursemail.com

что преобразуется в:

Return-Path: <incoming+verp-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@meta.discoursemail.com>
From: Person <notifications@meta.discoursemail.com>
Reply-To: Person <incoming+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@meta.discoursemail.com>

Адрес уведомления помещается в заголовок From, а reply_by_email_address — в envelope-from. Мы настроили входящую почту так, что любые письма, адресованные …@meta.discoursemail.com, доставляются на meta, что обеспечивает работу этой схемы.

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

Эта ошибка определённо исходит от почтового сервера. Discourse может лишь сообщать вам о ней, но генерирует её именно почтовый сервер.