Korzystając z Postfix, chciałbym, aby wszystkie wiadomości przychodzące na dowolny adres (w tym te, które nie były mapowane na lokalnych użytkowników) były przesyłane potokowo do skryptu. Próbowałem skonfigurować mailbox_command
w /etc/postfix/main.cf
:
mailbox_command = /path/to/myscript.py
Działa to świetnie, jeśli użytkownik jest użytkownikiem lokalnym, ale kończy się niepowodzeniem w przypadku „nieznanych” użytkowników, którzy nie mają aliasów. Próbowałem ustawić luser_relay
użytkownika lokalnego, ale to uprzedza mailbox_command
, więc polecenie się nie uruchamia. Próbowałem ustawić local_recipient_maps=
(pusty ciąg znaków), ale wiadomość jest nadal odsyłana (nieznany użytkownik).
Czy istnieje magiczne wywołanie, którego mogę użyć, aby zachęcić wszystkich znanych i nieznanych użytkowników do przejścia do skryptu?
Pełne /etc/postfix/main.cf
śledzenie - jest to domyślny Ubuntu 10.04, z wyjątkiem mailbox_command
wiersza:
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = ... snip ...
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = sassafras, ... snip ...,localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
mailbox_command = /path/to/my/script.py
Odpowiedzi:
Ok, właśnie uruchomiłem to - choć bardziej fryzjerskie, niż się spodziewałem. Upuściłem
maildir_command
część i poszedłemtransport_maps
. Kluczem jest zrobienie 5 rzeczy:/etc/postfix/master.cf
do przesyłania wiadomości e-mail do skryptu./etc/postfix/main.cf
użycie bazy danych transportu dlatransport_maps
i aliasu bazy danych dlavirtual_alias-maps
.(1) Utwórz,
/etc/postfix/virtual_aliases
aby dodać alias catch-all -localuser
musi być istniejącym użytkownikiem lokalnym:(2) Utwórz,
/etc/postfix/transport
aby dodać mapowanie transportu. „mytransportname” może być czymkolwiek chcesz; jest używany poniżej wmaster.cf
:(3) Następnie, zarówno
transport
ivirtual_aliases
muszą być kompilowane do plików Berkeley DB:(4) Dodaj transport do
/etc/postfix/master.cf
:(5) W
/etc/postfix/main.cf
:I ... dobrze iść! Do licha.
źródło
relay_domains
(w takim przypadku plik transportowy może filtrować na podstawie rzeczywistego adresu Do:).virtual_transport = mailcaptcha:
inmain.cf
imailcaptcha unix - n n - - pipe flags=FR user=vmail argv=/usr/bin/perl /usr/local/mail-captcha/verify.pl ${sender} ${recipient}
inmaster.cf
. Zobacz postfix.org/transport.5.html i postfix.org/VIRTUAL_README.html .postfix restart
lubreload
czy coś takiego? Ostatnia rzecz: czy istnieje plik dziennika, aby zobaczyć maile, które przybyły do Postfiksa?/var/log/mail.log
.Jedynym razem, gdy użyłem czegoś takiego, była skrzynka pocztowa konkretnego użytkownika. Wszystko, co było wymagane, to alias nazwy tego użytkownika do potoku i proces w aliasach:
To wysłało ruch przeznaczony dla „[email protected]” do skryptu perla, który napisałem, aby go przetworzyć.
gotit.pl (jako przykład, nie wybieraj mnie za kiepskie umiejętności programistyczne = =). Zadanie polegało na przetworzeniu wiadomości e-mail wysłanej na nasz serwer Exchange (na którą została udzielona automatyczna odpowiedź za pomocą kodu VB) w celu sprawdzenia, czy Exchange przetwarza wiadomości e-mail w odpowiednim czasie. Jeśli nie, serwer pocztowy wyśle wiadomość e-mail z ostrzeżeniem do naszych pagerów i napisze plik blokady, abyśmy nie byli ciągle spamowani.
źródło
Użyłem „płaskiego pliku” w starym stylu,
Mailbox
aby odbierać całą pocztę (a następnie przycinać ją co kilka godzin, jeśli jest duża), zamiast używać nowoczesnychmaildir/
folderów do przetwarzania poczty za pomocą skryptów. Mógłbyś też uruchomić plik logrotate na pliku. Przypuszczam, że można go zarządzać.W ten sposób możesz po prostu skopiować całą pocztę do skrzynki pocztowej jako użytkownik lokalny.
źródło
Po wielu problemach z głowami stworzyłem to rozwiązanie w oparciu o kilka różnych źródeł, co spowodowało o wiele mniej wysiłku, krytyczne kroki zostały skonfigurowane,
virtual_alias_domains
a takżevirtual_alias_maps
upewniając się, że wirtualne mapowanie było pomy-alias@localhost
prostumy-alias
. W moim przykładzie alias polecenia polega na potokowaniu wiadomości e-mail do punktu końcowego interfejsu API witryny, ale równie dobrze może potokować do czegoś innego.Oto kroki, które musisz podjąć:
10 mail.your-domain-name
sudo apt-get install postfix
sudo vi /etc/postfix/main.cf
mydestination
wartoścido końca pliku
sudo apt-get vi /etc/aliases
sudo newaliases
sudo apt-get vi /etc/postfix/virtual_domains
(pola #domain pomijają ostrzeżenia)
sudo postmap /etc/postfix/virtual_domains
sudo apt-get vi /etc/postfix/virtual
sudo postmap /etc/postfix/virtual
sudo /etc/init.d/postfix reload
źródło