На самом деле, ответ 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
, если вы заинтересованы в парсинге +id
bounce только в вашем скрипте.
Message-Id
в заголовок, он должен быть отправлен обратно, и это будет хватит проверять кто есть кто.