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: bounce-123456789@example.com

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?


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 bounce-xxx@example.comadresu) 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 bounce@example.comskrzynce 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ć.


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 = bounces@example.com
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
bounces@example.com bulkbounce:

Jak widać, mówimy teraz, że postfix powinien być używany, bounces@example.comgdy wiadomość e-mail zostanie odesłana. Następnie na mapie transportu, aby użyć bulkbouncejako usługi do obsługi dowolnego adresu e-mail bounces@example.com.

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 user+id@fromdomain.com, to będziesz chciał skomentować wiersz main.cfdla bounce_notice_recipient, jeśli chcesz przeanalizować +idodbicie tylko w skrypcie.


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 bounce@example.com i originalfrom@example.com (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 „user+id@fromdomain.com”, 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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.