Все адреса, которые я использую на форуме, могут отправлять и получать письма через почтовый клиент, такой как Thunderbird или Claws Mail.
Имеется четыре различных адреса, но в данном вопросе затрагиваются только первые три:
адрес администратора в app.yml: admin@
адрес уведомлений в app.yml: forum@
адрес для ответа (reply-to): reply@
и адрес для публикации через email: questions@
Уведомления, получаемые через статус рассылки форума, отправляются корректно. Тест отправки со страницы admin/email/server-settings также проходит успешно.
Если я включаю функцию ответа по электронной почте, она работает корректно, но уведомления перестают функционировать.
Предыдущий тест отправки теперь завершается ошибкой со статусом «501 5.5.4 Вам не разрешено отправлять с этого адреса».
Если я отключаю ответ по электронной почте, тест снова проходит успешно.
Кто сможет объяснить, почему возникает эта ошибка, и как правильно настроить одновременно и уведомления, и функцию «ответ по электронной почте»?
Это сообщение от вашего сервиса отправки почты. Оно довольно понятное.
Вам нужно отправлять с адреса электронной почты, который разрешён вашему SMTP-серверу. Скорее всего, сервер настроен на отправку с домена example.com, а вы пытаетесь отправить с форума.example.com.
Почему в одном случае тест отправки проходит успешно, а при включении «ответа по электронной почте» он не проходит? Уточню, что я не меняю конфигурацию уведомлений.
Что происходит на уровне Discourse при подготовке писем?
Это магическое число позволяет Discourse связывать ответы с темой.
Вам понадобится другой почтовый сервер (или нужно настроить текущий для поддержки адресов с символом +), либо отказаться от функции ответа по электронной почте.
Да, я знаю, что это идентификатор для использования функции «ответ по электронной почте».
Поэтому тест отправки писем не работает, когда включена функция «ответ по…». В документации об этом не сказано, и ошибка возникает именно в Discourse, а не на почтовом сервере, что вы и указали в своём первом ответе!
Речь не идёт о преобразововании заголовка как такового. Когда включена функция «ответ по электронной почте», Discourse отправляет письмо с адресом в поле envelope-from, соответствующим шаблону reply_by_email_address, а также устанавливает заголовок Reply-To:, если письмо можно использовать для ответа.
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 может лишь сообщать вам о ней, но генерирует её именно почтовый сервер.