Jak zbierać odbicia w postfiksie

15

Jest to związane z tym pytaniem:

linux - Sposoby otrzymania raportu zwrotnego dla mojej aplikacji do biuletynu? - Błąd serwera

Załóżmy, że generuję takie adresy e-mail, gdy wysyłam biuletyny w celu identyfikacji odrzuceń i wypisania się z mojego biuletynu: [email protected]

Zakładam, że użyłbym tego na ścieżce powrotnej, prawda?

Jak więc ustawić to w postfixie, aby zebrać wszystkie adresy z prefiksem „bounce-” w ​​jednej skrzynce pocztowej?

W końcu słyszałem, że ludzie wspominali o miękkim odbiciu od twardego odbicia. Czy ktoś może wyjaśnić inne i jak należy liczyć, aby wiedzieć, kiedy na stałe usunąć kogoś z biuletynu e-mail?

Brian Armstrong
źródło
Pamiętaj, że adres e-mail zawierający słowo „odesłanie” może być również postrzegany jako „fuj”… (spam) - biorąc pod uwagę, że jeśli możesz Message-Idumieścić swój własny nagłówek, należy go odesłać i to wystarczy sprawdzić, kto jest kim.
Alexis Wilke,

Odpowiedzi:

17

Dokładna odpowiedź na twoje pytanie (obsługa [email protected]adresu) zależy od tego, jak serwer jest skonfigurowany do odbierania poczty. Jeśli example.comjest to domena wirtualna, najlepsze, co możesz zrobić, to zebrać wiadomości w [email protected]skrzynce pocztowej (przy założeniu recipient_delimiter = -).

Jeśli example.comjest to lokalnie dostarczona domena dla serwera (poczta jest dostarczana do rzeczywistych kont systemowych), możesz dodać .forwardplik do katalogu domowego bounceużytkownika, który dostarcza do programu, który analizuje informacje o odesłaniu i zapisuje je w bazie danych lub pliku . Zobacz man localwięcej informacji o .forwardformacie i sposobie dostarczania do programu.

To, co robimy, ponieważ wysyłamy wiadomości do wielu domen, jest wykorzystywane bounces.example.comjako nasza domena VERP. Tę domenę należy dodać do relay_domains. Utwórz za /etc/postfix/transport_mapspomocą tej zawartości:

bounces.example.com             bulkbounce:

Następnie dodaj wiersz podobny do tego /etc/postfix/master.cf:

bulkbounce unix - nn - - pipe
  użytkownik = nikt argv = / usr / local / bin / bounce_handler.py $ {adresat}

bounce_handler.pySkrypt akceptuje adres VERP jako jego opcji wiersza poleceń, analizuje je i sprawia, że niezbędne aktualizacje baz danych do rejestrowania odbić.

Insyte
źródło
Ooh, podoba mi się pomysł używania delimitu odbiorcy do grupowania ich. Zazwyczaj używa się znaku +, prawda? Myślę, że to zadziała świetnie, dzięki!
Brian Armstrong,
11

W rzeczywistości odpowiedź Instyle jest bardzo trudna do wdrożenia, jeśli chcesz obsługiwać wiele różnych domen i jest błędna, ponieważ:

a) Na jego przykładzie transport_mapswszystkie wiadomości e-mail wysyłane do tej domeny są wysyłane do tej konkretnej usługi bez względu na to, czy wiadomości e-mail są odsyłane, czy nie. Ponieważ używa określonej nazwy domeny, w rzeczywistości powinien być tylko odbijanymi wiadomościami e-mail ... ale nie można tego zagwarantować.

b) Dane wysłane na Twój skrypt to sam e-mail, a nie wiadomość odesłana. Innymi słowy, Twój kod może nie mieć pojęcia, dlaczego wiadomość e-mail została odesłana (tzn. Odesłanie lokalne wyśle ​​Ci tylko oryginalną wiadomość e-mail).


Prawidłowym sposobem wykonania tej konfiguracji w Postfiksie jest użycie klasy powiadomień o odesłaniu.

1) W /etc/postfix/main.cf

notify_classes = bounce
bounce_notice_recipient = [email protected]
transport_maps = hash:/etc/postfix/transport_maps

2) W / etc / postfix / transport_maps

# when you make changes to this file, run:
#   sudo postmap /etc/postfix/transport_maps
[email protected] bulkbounce:

Jak widać, mówimy teraz, że postfix powinien być używany, [email protected]gdy wiadomość e-mail zostanie odesłana. Następnie na mapie transportu, aby użyć bulkbouncejako usługi do obsługi dowolnego adresu e-mail [email protected].

Wreszcie możesz zdefiniować za bulkbouncepomocą skryptu:

3) W /etc/postfix/master.cf

bulkbounce unix -       n       n       -       -       pipe
  flags=FRq user=bounce argv=/home/bounce/bin/snapbounce --sender ${sender} --recipient ${recipient}

Ten skrypt wymaga posiadania użytkownika. nobodyto także dobry wybór. Jeśli chcesz mieć konkretnego użytkownika, możesz go utworzyć za pomocą:

useradd bounce

Bez skryptu master.cfwiadomości e-mail są wysyłane na konto zbiorcze. Więc jeśli masz skrypt, który analizuje wiadomości e-mail z plików, działałoby to bez zmian transport_mapsi master.cf.


Od komentarza poniżej:

fyi - re: podwójne odbicie ...
jeśli modyfikujesz adres zwrotny (np. adres VERP [email protected], to będziesz chciał skomentować wiersz main.cfdla bounce_notice_recipient, jeśli chcesz przeanalizować +idodbicie tylko w skrypcie.

Alexis Wilke
źródło
Używając twojego sposobu, jakoś odbieram dwa razy, raz z bounce + id @ ... i raz z bounce @ ... z podwójnego bounce - (odesłanie użytkownika w rzeczywistości nie istnieje w systemie - ponieważ nie mam zamiaru „zapisz” te e-maile). Wiadomość e-mail jest wysyłana ze ścieżką zwrotną bounce + id @ ... Wiesz, czego mi brakuje?
RVandersteen,
@RVandersteen Nie jestem pewien, dlaczego dostaniesz go dwa razy. Ten z +id@może być jakąś kopertą?
Alexis Wilke
Kiedy używam naszego domyślnego adresu „z” - odesłanie wciąż jest wysyłane na adres [email protected] i [email protected] (nie dodano już ścieżki zwrotnej)
RVandersteen
1
W celu późniejszego wykorzystania dodanie klasy powiadomień nie zmienia zachowania MTA wysyłającego komunikat zwrotny na ścieżkę FROM / Return. Dodaje na nim zachowanie (wysyła je również do powiadomienia_odbicia_recipient). Właśnie dlatego
otrzymywałem
1
fyi - re: podwójne odbicia .. jeśli modyfikujesz adres zwrotny (adres VERP, taki jak „[email protected]”, wtedy będziesz chciał skomentować wiersz w main.cf dla „bounce_notice_recipient”, jeśli chcesz analizować odbijanie + id tylko w swoim skrypcie
sarora
1

Większość współczesnych programów do obsługi list mailingowych już wie, jak obsługiwać wiadomości VERP, jeśli MTA jest odpowiednio skonfigurowane do przekazywania ich z powrotem do oprogramowania do listy mailingowej. W przypadku GNU Mailman powinieneś sprawdzić stronę FAQ o trafnej nazwie „Jak korzystać z VERP z separatorem (Postfix recipient_delimiter)?”.

Jeśli tworzysz własne niestandardowe oprogramowanie do obsługi biuletynów, powinieneś zadać sobie pytanie, dlaczego od nowa wymyślasz koło zamiast korzystać z istniejących aplikacji, które potrafią już łatwo i łatwo obsłużyć to zadanie.

Jeremy Bouse
źródło
Tak, tworzę własne oprogramowanie do biuletynów. Jest dobry powód!
Brian Armstrong,
Następnie powinieneś rozważyć użycie VERP do prawidłowej obsługi odrzuceń.
Jeremy Bouse
Cześć Jeremy, myślę, że masz rację. VERP jest tutaj standardowym rozwiązaniem, chociaż wydaje się, że przydatne jest jedynie zidentyfikowanie nadawcy i odbiorcy. W takim przypadku musimy również zidentyfikować konkretną wiadomość, która spowodowała odesłanie, więc uważam, że będziemy musieli zrobić niestandardowe rozwiązanie z naszym własnym identyfikatorem w adresie. Myślę, że rozwiązanie wymienione poniżej za pomocą ogranicznika odbiorcy pozwoli nam zgrupować je razem na jednym koncie odrzuceń. Dziękuję za odpowiedź, ale doceniam pomoc!
Brian Armstrong,
Rozwiązanie Insyte to po prostu zmodyfikowany VERP w jego rdzeniu. Musisz tylko upewnić się, że zawiera on wystarczająco unikatowego identyfikatora, aby Twój program obsługi odrzuceń mógł go zidentyfikować. W większości programów do obsługi list adresowych jest to adres e-mail, ale może to być wszystko, ponieważ projektujesz własne.
Jeremy Bouse