Это связано с этим вопросом:
linux - Как получить отчет о возврате для моего приложения для рассылки новостей? - Ошибка сервера
Скажем, я генерирую такие адреса электронной почты, когда отправляю информационные бюллетени, чтобы определить отказы и отписаться от них: bounce-123456789@example.com
Полагаю, я бы использовал это в обратном пути, верно?
Тогда как мне настроить его в postfix для сбора всех этих адресов с префиксом «bounce-» в один почтовый ящик?
Наконец, я слышал, как люди упоминают мягкий отскок по сравнению с жестким отскоком. Может ли кто-нибудь объяснить разницу и как их следует подсчитывать, чтобы знать, когда окончательно удалить кого-то из рассылки по электронной почте?
Точный ответ на ваш вопрос (обработка bounce-xxx@example.com
адрес) зависит от того, как ваш сервер настроен для приема почты. Если example.com
виртуальный домен, лучшее, что вы можете сделать, это собрать сообщения в bounce@example.com
почтовый ящик (при условии recipient_delimiter = -
).
Если example.com
является локально доставленным доменом для сервера (почта доставляется на фактические системные учетные записи), тогда вы можете добавить .forward
файл в домашний каталог bounce
user, который доставляет в программу, которая анализирует информацию о сбоях и записывает ее в базу данных или файл. Видеть man local
для получения дополнительной информации о .forward
формат и как передать в программу.
Поскольку мы отправляем сообщения для большого количества доменов, мы используем bounces.example.com
как наш домен VERP. Этот домен нужно добавить в relay_domains
. Создайте /etc/postfix/transport_maps
с этим содержанием:
bounces.example.com bulkbounce:
Затем добавьте строку, подобную этой, к /etc/postfix/master.cf
:
bulkbounce unix - n n - - pipe user=nobody argv=/usr/local/bin/bounce_handler.py ${recipient}
В bounce_handler.py
сценарий принимает адрес VERP в качестве параметра командной строки, анализирует его и выполняет необходимые обновления базы данных для записи возврата.
На самом деле, ответ Instyle очень сложно реализовать, если вы хотите поддерживать много разных доменов, и это неверно, потому что:
а) На его примере transport_maps
, все электронные письма, отправленные в этот домен, отправляются в эту конкретную службу независимо от того, являются ли электронные письма возвращенными или нет. Поскольку он использует определенное доменное имя, это действительно должны быть только возвращенные электронные письма ... но это не может быть гарантировано таким образом.
б) Данные, отправляемые в ваш скрипт, - это само письмо, а не сообщение о недоставке. Другими словами, ваш код может не знать, почему письмо было отклонено (то есть локальный возврат отправит вам только исходное письмо).
Правильный способ сделать эту настройку в postfix - использовать класс уведомления о недоставке.
1) В /etc/postfix/main.cf
notify_classes = bounce
bounce_notice_recipient = bounces@example.com
transport_maps = hash:/etc/postfix/transport_maps
2) В / etc / postfix / transport_maps
# when you make changes to this file, run:
# sudo postmap /etc/postfix/transport_maps
bounces@example.com bulkbounce:
Как видите, теперь мы говорим postfix использовать bounces@example.com
всякий раз, когда письмо возвращается. Затем на транспортной карте, чтобы использовать bulkbounce
как сервис для обработки любого адреса электронной почты bounces@example.com
.
Наконец, вы можете определить bulkbounce
с вашим скриптом:
3) В /etc/postfix/master.cf
bulkbounce unix - n n - - pipe
flags=FRq user=bounce argv=/home/bounce/bin/snapbounce --sender ${sender} --recipient ${recipient}
Этот сценарий требует, чтобы у вас был пользователь. nobody
тоже хороший выбор. Если вы хотите иметь определенного пользователя, вы можете создать его с помощью:
useradd bounce
Без сценария в master.cf
, электронные письма отправляются в учетную запись Bulkbounce. Итак, если у вас есть сценарий, который анализирует электронные письма из файлов, он будет работать без transport_maps
и master.cf
изменения.
Из комментария ниже:
fyi - re: двойные отскоки ...
если вы изменяете обратный адрес (адрес VERP, напримерuser+id@fromdomain.com
, тогда вы захотите закомментировать строку вmain.cf
дляbounce_notice_recipient
, если вы хотите разобрать+id
bounce только в вашем скрипте.
Большинство современных программ для списков рассылки уже знает, как обрабатывать сообщения VERP, если MTA правильно настроен для передачи их обратно в программное обеспечение списков рассылки. В случае GNU Mailman вы должны проверить Вопросы-Ответы страница с метким названием «Как использовать VERP с разделителем - (Postfix recipient_delimiter)?».
Если вы создаете собственное программное обеспечение для рассылки новостей, чтобы справиться с этим, вы должны спросить себя, почему вы заново изобретаете колесо вместо того, чтобы использовать существующие приложения, которые уже могут справиться с этой задачей просто и легко.