Обнаружение отклоненных сообщений по заголовку Return-Path - PullRequest
12 голосов
/ 02 февраля 2012

Некоторое время назад я увидел вопрос об обнаружении отклоненных сообщений:

Я работаю над инструментом, который будет отправлять массовые сообщения (не спам :), и мне нужно добавить функцию, которая будет обнаруживать отклоненные сообщения. Есть ли стандартный ответ, связанный с отскоками? Будет ли это в шапке тела? By Santa, 2011-09-12


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

Единственная часть информации, которая останется полностью нетронутой в отскоке, - это адрес электронной почты обратного пути - адрес, на котором ваш сервер объявляет, что ему требуется отскок. Таким образом, единственный способ автоматизировать по-настоящему точный отскок - это закодировать получателя непосредственно в адрес обратного пути. Обычно это делается путем переопределения адреса пути возврата вашего сервера по умолчанию для каждого исходящего сообщения, используя уникальное значение для каждого получателя, например bounce-XXXXX@yourdomain.com, где XXXXX - это некоторое закодированное и / или запутанное представление адреса электронной почты получателя или какой-то другой внутренний идентификатор. Этот метод требует использования сервера электронной почты, который может поддерживать этот тип универсального универсального адреса, чтобы вам не приходилось настраивать новую учетную запись для каждого адреса электронной почты, на который вы отправляете сообщение. Предполагая это, вы просто конфигурируете сервер для выгрузки всех таких сообщений bounce- * в ваш скрипт, который должен только декодировать XXXXX, чтобы определить, кто был первоначальным получателем. ответил 12 сентября '11 Алекс Ховански

Вышеуказанное кажется отличным решением. Теперь мой вопрос:

Как настроить почтовый сервер Postfix (или любой другой) для отправки каждого отклоненного сообщения электронной почты из учетной записи bounce@yourdomain.com в сценарий, который будет анализировать и извлекать личность исходного получателя? Имеется ли в сценарии для сохранения каталог на почтовом сервере и дамп сообщения в одном каталоге?

Позволит ли сторонний поставщик услуг электронной почты настроить учетную запись электронной почты для отправки сообщений и установить скрипт на сервере?

Sing

1 Ответ

14 голосов
/ 02 февраля 2012

Кстати, соответствующий стандарт называется VERP .

Вы имеете в виду bounce+token@yourdomain.com, а не просто bounce@yourdomain.com.Этот маркер делает его уникальным!

Postfix уже будет принимать почту для a+something@example.net при наличии действительного адреса a@example.net, пока вы настраиваете recipient_delimiter в main.cf:

recipient_delimiter = +

Есть несколько различных способов настроить Postfix так, чтобы он доставлял почту вашему скрипту и сообщал вам, что был токен.Попробуйте это:

  1. Создайте адрес bounce@yourdomain.com так же, как вы обычно создаете псевдонимы в этом домене: например, обычный псевдоним или виртуальный почтовый ящик

  2. Создайте заказной транспорт для доставки в master.cf.${extension} означает, что скрипт получит все, что пришло после + в качестве первого аргумента, и <username>, если локальный uid, под которым должен выполняться скрипт.

    bounce   unix  -       n       n       -       -       pipe
      flags=R user=<username> argv=/script/which/receives/bounces ${extension}
    
  3. Создайте карту транспорта, если у вас ее еще нет:

    transport_maps = hash:/etc/postfix/transport
    
  4. Добавьте следующую строку в /etc/postfix/transport, чтобы указать bounce@yourdomain.com для нового транспорта, который вы создали вmaster.cf:

    bounce@yourdomain.com    bounce:
    
  5. Перестроить транспортную карту:

    postmap /etc/postfix/transport
    
...