Отправить VERP-совместимое письмо, используя python и postfix

Я хочу иметь возможность отправлять электронные письма в Python, чтобы я мог анализировать отказов. VERP, кажется, решение этой проблемы. Однако я не получаю уведомления о сбое, когда я устанавливаю свой адрес отправителя (не значение "От" объекта MIMEMultipart), чтобы включить разделитель VERP.

Могу ли я просто сформировать своего собственного отправителя VERP (т.е. отправить по адресу user@domain.com, могу ли я просто задать адрес From: для этого получателя "mysender+user-domain-com.mydomain.com") и ожидать, что он будет работать, или мне нужно настроить postfix для правильного разбора сбойного DSN? Моя проблема заключается в получении уведомления об ошибке, а не в получении сообщения для доставки действительным получателям, когда я делаю это.

Может быть, пример поможет.

Когда я отправляю электронное письмо с myuser@domain.com, я получаю уведомления об отказах.

Когда я отправляю электронное письмо от myuser+verp_identifier@domain.com, я не получаю никаких уведомлений об отказе. (Хотя адреса электронной почты с правильной адресацией, например: valid_user@gmail.com, проходят очень хорошо.) В почтовом модуле Perl есть подмодуль Verp, есть ли в python что-то подобное?

2 ответа

Решение

Вы должны использовать "Return-Path", а не FROM в качестве адреса, на который отправляется отклоненное сообщение. Указание пути возврата в исходящем сообщении с использованием Postfix не требует специальной настройки.

Требование к конфигурации для Postfix для обработки переменных входящих сообщений может быть обработано с помощью + в адресе, потому что + и все последующее, как правило, игнорируются. Поэтому установка Return-Path на joe+bounce@here.com должна быть доставлена ​​на joe@here.com с адресом To joe+bounce@here.com. Программная обработка сообщения может быть выполнена с добавлением фильтра в файл master.cf.

Поместите это в список услуг:

smtp      inet  n       -       -       -       -       smtpd
  -o content_filter=filter:dummy

и определите фильтр здесь:

filter    unix  -       n       n       -      10       pipe
  flags=Rq user=filter null_sender=
  argv=/home/filter/InboundProcessor.py -f ${sender} -- ${recipient}

Это заставит скрипт InboundProcessor.py получать все входящие сообщения через канал. Если адрес "Кому" содержит + после некоторого значения ключа возврата, который можно связать с недействительным адресом, вы можете пометить этот адрес как неактивный в вашей базе данных.

Чтобы правильно работать с VERP, Postfix должен быть специально настроен. smtpd_authorized_verp_clients в котором перечислены клиенты, которым разрешено использовать VERP, настроить только отправляющую часть. Фактически в нем перечислены клиенты, которым разрешено использовать команду XVERP, которая автоматически добавляет +dest конвертировать адрес отправителя.

Но в конфигурации по умолчанию Postfix не доставляет автоматически sender сообщения, отправленные sender+ext, Чтобы это работало, вы должны добавить (или раскомментировать) recipient_delimiter = + в main.cf, В конфигурации по умолчанию строка присутствует, но закомментирована.

Так что, если вы можете сформировать свой собственный адрес отправителя VERP, т.е. иметь адрес отправителя enveloppe myuser+verpid@domain.com, вам больше нечего делать, если у вас есть recipient_delimiter = +: целевой SMTP-сервер отправит отказы на этот адрес, и ваш Postfix правильно доставит его на myuser@domain.com.

Я не знаю ни одного пакета python, который бы автоматически добавлял команду XVERB. Поэтому, IMHO, если вы хотите, чтобы он использовался автоматически, вы должны следовать следующему рецепту, описанному в Postfix VERP Howto:

Вы можете использовать функцию smtpd_command_filter для добавления XVERP к командам SMTP из устаревшего программного обеспечения. Для этого требуется Postfix 2.7 или более поздняя версия.

/etc/postfix/main.cf:
    smtpd_command_filter = pcre:/etc/postfix/append_verp.pcre
    smtpd_authorized_verp_clients = $mynetworks

/etc/postfix/append_verp.pcre:
    /^(MAIL FROM:<listname@example\.com>.*)/ $1 XVERP
Другие вопросы по тегам