Насправді відповідь Instyle дуже важко реалізувати, якщо ви хочете підтримувати багато різних доменів, і це неправильно, оскільки:
а) На його прикладі transport_mapsвсі повідомлення електронної пошти, що надсилаються до цього домену, надсилаються до цієї конкретної служби, не зважаючи на те, чи надходять електронні листи чи ні. Оскільки він використовує конкретне доменне ім’я, він дійсно повинен бути лише відхиленими електронними листами ... але це не може бути гарантовано таким чином.
b) Дані, надіслані вашому сценарію, - це сам електронний лист, а не повідомлення відмов. Іншими словами, ваш код може не мати поняття, чому електронний лист відскочив (тобто місцевий відмов надсилатиме вам оригінальний електронний лист).
Правильний спосіб зробити це налаштування в 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:
Як бачимо, тепер ми повідомляємо, що постфікс потрібно використовувати 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: подвійний відмов ...
якщо ви змінюєте адресу повернення (VERP-адреса, наприклад user+id@fromdomain.com, ви хочете прокоментувати рядок main.cfдля bounce_notice_recipient, якщо вам цікаво проаналізувати +idвідмов лише у вашому сценарії.
Message-Idу свій заголовок, він повинен бути відправлений назад, і це буде вистачить, щоб перевірити, хто хто.