Jak skonfigurować Postfix do przechowywania wiadomości e-mail w pliku zamiast przekazywania?


9

Chcę uruchomić kopię tymczasową serwera produkcyjnego w środowisku lokalnym. W systemie działa aplikacja PHP, która wysyła wiadomości e-mail do klientów w różnych scenariuszach i chcę się upewnić, że żadna wiadomość e-mail nigdy nie zostanie wysłana ze środowiska testowego.

Mogę dostosować kod, aby używał fałszywego nadawcy wiadomości e-mail, ale chciałbym uruchomić dokładnie ten sam kod, co w środowisku produkcyjnym. Mogę użyć innego MTA (Postfix to po prostu to, czego używamy w produkcji), ale chciałbym czegoś, co można łatwo skonfigurować pod Debian / Ubuntu :)

Tak więc chciałbym skonfigurować lokalną instalację Postfix do przechowywania wszystkich wiadomości e-mail w (jednym lub więcej) plikach zamiast ich przekazywania. Właściwie to nie obchodzi mnie, jak są przechowywane, o ile możliwe jest sprawdzenie wysłanej wiadomości e-mail. Działałaby nawet opcja konfiguracji, która mówi postfixowi, aby zachować pocztę e-mail w kolejce pocztowej (mogę wyczyścić kolejkę, gdy ponownie załaduję serwer pomostowy kopią z produkcji).

Wiem, że jest to możliwe, po prostu nie znalazłem żadnego dobrego rozwiązania online, które wydaje się być dość powszechną potrzebą.

Dzięki!

Odpowiedzi:


12

Utworzyłem nowy transport za pomocą polecenia potoku, które zapisuje wiadomości e-mail w pliku.

Gruntownie:

  1. Utwórz użytkownika, który będzie właścicielem wiadomości e-mail (lub użyje istniejącego). Zadzwoniłem do mnieemail
  2. mkdir /home/email/bin
  3. Umieść następujący skrypt w /home/email/bin/mail_eater(używa PHP, ale możesz napisać własną wersję w dowolnym języku, który lubisz, po prostu dołącza stdin do pliku):

    #!/usr/bin/php
    <?php
    $fd = fopen("php://stdin", "r");
    $email = "";
    while (!feof($fd)) {
        $email .= fread($fd, 1024);
    }
    fclose($fd);
    $fh = fopen('/home/email/email.txt','a');
    fwrite($fh, $email."\n-------------------------------------------------------\n\n");
    fclose($fh);
    
  4. chmod a+x /home/email/bin/mail_eater
  5. touch /home/email/email.txt
  6. chmod a+r /home/email/email.txt
  7. Utwórz nowy transport przy użyciu tego pliku, dodając następujący wiersz w master.cf:

    file_route unix -    n    n    -    -    pipe user=email  argv=/home/email/bin/mail_eater
    
  8. Użyj tego jako domyślnego transportu w main.cf:

    default_transport = file_route
    

Tam :)


3

Można umieścić te domeny do $mydestinationIN main.cf, więc postfix będzie go dostarczyć lokalnie.

Możesz skonfigurować różnych lokalnych użytkowników, jeśli chcesz lub możesz skonfigurować lokalny adres typu catch-all, aby dostarczać e-maile tylko do jednego konta, więcej szczegółów tutaj: http://www.postfix.org/ADDRESS_REWRITING_README.html#luser_relay

Dla wszystkich domen:

mydestination = pcre:/etc/postfix/mydestinations

i /etc/postfix/mydestinationspowinien zawierać

/.*/    ACCEPT

Nie mogę teraz przetestować, ale powinno działać.


Nie wiem, jak wyglądają domeny docelowe (pochodzą z prawdziwej bazy danych klientów). Sprawdzę jednak link.
— GomoX

Dzięki za aktualizację, opublikowałem własne rozwiązanie problemu, ponieważ wydaje się ono „czystsze”, ale wygląda na to, że powinno również działać.
— GomoX

Aby działać zgodnie z przeznaczeniem, wymaga to również ustawienia local_recipient_maps = . Jest to opisane w linku, który podałeś, ale myślę, że należy to również wspomnieć w odpowiedzi.
— jojman

2

try (w main.cf):

defer_transports = smtp

możesz wtedy zobaczyć kolejkę postqueue -pi oglądać zawartość za pomocąpostcat


0

W zależności od dystrybucji możesz spojrzeć na „nullmailer”. Jest to przekaźnikowy MTA, który przekazuje do innego SMTP w sieci lub zdalnie. Może to być bardzo nieprawidłowy SMTP, w takim przypadku prawdopodobnie umieściłby go tylko w kolejce w folderze na komputerze.

W debian i ubuntu jest to dostępne jako zamiennik MTA dla twojego systemu.


0

Jest to skopiowane i nieco zmodyfikowane z mojego bloga http://blog.malowa.de/2011/04/postfix-as-spam-trap-server.html :

Nie musisz nawet konfigurować Postfix, aby działał jako nullmailer. Postfix jest dostarczany ze zgrabnym narzędziem o nazwie, smtp-sinkktóre załatwia sprawę. smtp-sink ma głównie służyć jako narzędzie testowe dla klientów SMTP, którzy potrzebują serwera do zabawy. Możesz więc skonfigurować go tak, aby rejestrował całą rozmowę, a nawet zrzucał każdą otrzymaną wiadomość do pliku. Ten ostatni jest potrzebny dla nullmailera.

Nie ma pliku konfiguracyjnego do skonfigurowania smtp-sink. Wszystko odbywa się za pomocą opcji wiersza polecenia.

smtp-sink -c -d "%Y%m%d%H/%M." -f . -u postfix -R /tmp/ -B "550 5.3.0 The recipient does not like your mail. Don't try again." -h spamtrap.example.com 25 1024

Przyjrzyjmy się bliżej każdemu parametrowi.

-u postfix
Runs the program under the user "postfix"
-R /tmp/
Sets the output directory to /tmp/. In this directory the mails will be stored. If you have a high spam volume (hundreds of Spam per minute) it is recommended to write the mails to a ramdisk
-d "%Y%m%d%H/%M."
Writes the mail to a directory of the format "YearMonthDayHour" and in this directory the files are name "Month.RandomID". Note that the dates are in UTC
-c
Write statistics about connection counts and message counts to stdout while running
-f .
Reject the mail after END-OF-DATA. But the mail will be saved. Cool, isn't it?!
-B "550 5.3.0 The recipient does not like your mail. Don't try again"
This is the rejection message after END-OF-DATA.
-h spamtrap.example.com
Announce the hostname spamtrap.example.com
25
The port to listen on. Can be prepended with an IP or host if you want to bind on a special interface.
1024
The backlog count of connections that can wait in the TCP/IP stack before they get a free slot for sending mail.

Możesz znaleźć więcej informacji na stronie podręcznika smtp-sink, ale są one ważne, aby uruchomić pułapkę spamu typu catch-all. W tej konfiguracji program akceptuje dowolną pocztę o dowolnym rozmiarze od dowolnego nadawcy do dowolnego odbiorcy z IPv4 i IPv6. Jedynymi ograniczeniami jest to, że możliwe jest tylko 256 jednoczesnych połączeń z 1024 połączeniami w kolejce, a program jest oznaczony jako eksperymentalny. Więc nie używaj smtp-sink w środowisku produkcyjnym.

Opcja -B jest poprawna tylko w nowszych wersjach Postfix. W 2.7.1 brakuje. W 2.8.2 jest obecny. Gdzieś pomiędzy tym został wprowadzony.

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.