На самом деле, ответ 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письма отправляются на учетную запись. Так что если у вас есть скрипт , который разбирает письма из файлов, это будет работать без transport_mapsи master.cfизменений.
Из комментария ниже:
fyi - re: double bounces ...
если вы изменяете адрес возврата (адрес VERP, такой как user+id@fromdomain.com, то вы захотите закомментировать строку main.cfдля bounce_notice_recipient, если вы заинтересованы в парсинге +idbounce только в вашем скрипте.
Message-Idв заголовок, он должен быть отправлен обратно, и это будет хватит проверять кто есть кто.