Назад | Перейти на главную страницу

Как собирать отказы в postfix

Это связано с этим вопросом:

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)?».

Если вы создаете собственное программное обеспечение для рассылки новостей, чтобы справиться с этим, вы должны спросить себя, почему вы заново изобретаете колесо вместо того, чтобы использовать существующие приложения, которые уже могут справиться с этой задачей просто и легко.