Вопрос или проблема
Я хотел бы отклонить письма на определенный адрес с пользовательским сообщением. Письма на другие несуществующие адреса должны оставаться без изменений. Как я могу это сделать? Я использую Postfix 2.7.0 на Ubuntu 10.4.
Предыстория: Мои веб-сайты отправляют письма моим пользователям, и пока что мой личный адрес используется в качестве отправителя. Я бы хотел изменить его на noreply@… адрес, но так как пользователи часто отвечают на эти письма, я бы хотел отправить им полезное сообщение об отказе.
Спасибо!
Создайте карту custom_replies
(например, /etc/postfix/custom_replies
) со следующим содержимым:
[email protected] REJECT Like I said, NOREPLY
Выполните sudo postmap /etc/postfix/custom_replies
.
Отредактируйте /etc/postfix/main.cf
и добавьте следующее в качестве первой проверки smtpd_recipient_restrictions
:
check_recipient_access hash:/etc/postfix/custom_replies,
Затем выполните sudo postfix reload
.
Попробуйте отправить электронное письмо на [email protected]
:
$ telnet localhost 25
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mydomain.com ESMTP Postfix (Ubuntu)
HELO localhost
250 mydomain.com
MAIL FROM: <[email protected]>
250 2.1.0 Ok
RCPT TO: <[email protected]>
554 5.7.1 <[email protected]>: Recipient address rejected: Like I said, NOREPLY
quit
221 2.0.0 Bye
В дополнение к ответу @ΤΖΩΤΖΙΟΥ, если вам нужно проверить конкретное условие, а затем вернуть пользовательское сообщение, вы можете создать smtpd_restriction_classes
, которые указывают действие, которое вы хотите выполнить после того, как условие было проверено.
Использование: Предоставить пользовательское сообщение об отказе для заблокированных аккаунтов
Как уже упоминалось, создайте файл с пользовательским сообщением (например, /etc/postfix/custom_message
) с универсальным регулярным выражением:
/.*/ REJECT Sorry, your account has been suspended
Отредактируйте файл /etc/postfix/main.cf
и добавьте следующую строку перед любыми строками ограничений (например, smtpd_recipient_restrictions
):
smtpd_restriction_classes = reject_suspended_accounts_with_custom_msg
reject_suspended_accounts_with_custom_msg = regexp:/etc/postfix/custom_message
В файле карты, где вы выбираете заблокированные виртуальные почтовые ящики (например, /etc/postfix/suspended-map.cf
), добавьте следующий запрос (пример для MySQL, если есть столбец account_has_been_suspended
для идентификации таких аккаунтов):
...
query = SELECT 'reject_suspended_accounts_with_custom_msg' FROM virtual_users WHERE email_address="%s" AND account_has_been_suspended=1
Наконец, в соответствующем параметре ограничения (либо smtpd_sender_restrictions
, либо smtpd_recipient_restrictions
) добавьте проверку:
smtpd_recipient_restrictions = check_recipient_access mysql:/etc/postfix/suspended-map.cf
Таким образом, виртуальный почтовый ящик, который был помечен как “заблокированный” в базе данных, получит пользовательское сообщение об отказе.
Ответ или решение
Настройка пользовательского сообщения об отказе для определенных адресов электронной почты в Postfix
Если вы хотите настроить пользовательское сообщение об отказе для конкретного адреса электронной почты в Postfix, при этом оставив стандартные сообщения для других несуществующих адресов, следуйте инструкциям ниже. Рассмотрим решение для версии Postfix 2.7.0 на Ubuntu 10.4. Это поможет избежать недоразумений при использовании noreply-адреса, если пользователи часто отвечают на автоматические сообщения.
Шаг 1: Создание файла с пользовательскими сообщениями
Создайте файл /etc/postfix/custom_replies
и добавьте следующее содержимое:
[email protected] REJECT На это сообщение отвечать не надо
Задача этого файла — определить индивидуальное сообщение об отказе для адреса noreply@вашдомен.com
.
Шаг 2: Генерация хеш-таблицы
После создания файла выполните команду, чтобы создать хеш-таблицу:
sudo postmap /etc/postfix/custom_replies
Эта команда создаст бинарный файл, который Postfix может использовать для быстрого поиска.
Шаг 3: Настройка main.cf
Откройте файл конфигурации Postfix /etc/postfix/main.cf
и добавьте следующий параметр как первый в списке ограничений smtpd_recipient_restrictions
:
check_recipient_access hash:/etc/postfix/custom_replies,
Этот параметр указывает Postfix проверять получателей на наличие в файле custom_replies
.
Шаг 4: Перезапуск Postfix
После внесения изменений необходимо перезагрузить Postfix, чтобы новые настройки вступили в силу:
sudo postfix reload
Демонстрация работы
Теперь, когда кто-то пытается отправить письмо на [email protected]
, он получит сообщение "На это сообщение отвечать не надо" вместо стандартного сообщения об ошибке. Например, испытайте это с помощью telnet:
$ telnet localhost 25
HELO localhost
MAIL FROM: <[email protected]>
RCPT TO: <[email protected]>
При попытке отправить письмо на указанный адрес, Postfix вернет:
554 5.7.1 <[email protected]>: Recipient address rejected: На это сообщение отвечать не надо
Заключение
Данная настройка позволяет вам информировать пользователей о том, что на это письмо не надо отвечать. Если же вам потребуется больше условий, например, проверка учетных записей на приостановку, можно создать smtpd_restriction_classes
с дополнительными условиями, используя подобные подходы.
Эта настройка обеспечивает удобство для пользователей и предотвращает недоразумения с noreply адресами. Убедитесь, что все изменения вносятся административным пользователем и что ваш Postfix настроен правильно для работы с необходимыми файлами и конфигурациями.