it-swarm.com.de

Nur lokal sendmail, das alle E-Mails an ein Verzeichnis übermittelt

Ich habe einen Ubuntu Server (12.04.1) VM für die Entwicklung von PHP-Sites und E-Commerce-Sites (wie Magento usw.).

Da dies zu Entwicklungszwecken dient und ich mit anderen als meinen eigenen E-Mail-Adressen testen muss, muss der Befehl sendmail eine Möglichkeit bieten, eine E-Mail zu akzeptieren, sie jedoch nicht zuzustellen. Stattdessen kann ich mich das Archiv ansehen es.

Was ist der einfachste Weg, um einen Mail-Server so zu installieren, dass der Befehl sendmail ALLE Mails an ein lokales Verzeichnis weiterleitet? d. h. ich möchte KEINE E-Mails ins Internet senden.

Ich habe die in dieser Frage beschriebenen Schritte ausgeführt ( SMTP-Server, um ALLE E-Mails an Benutzer @ localhost zuzustellen ), aber es scheint nicht zu funktionieren - ich erhalte eine Fehlermeldung in meiner (lokalen) Mailbox, die mich darüber informiert dass es meine Testnachricht nicht zustellen kann (zB [email protected])

7
Gareth

Um meine eigene Frage zu beantworten, ist dies mit postfix möglich. Sie müssen zwei Dinge tun:

  1. Fügen Sie die in SMTP-Server beschriebenen Konfigurationsoptionen hinzu, um ALLE E-Mails an Benutzer @ localhost zuzustellen , und fügen Sie Folgendes zu Ihrer Datei /etc/postfix/main.cf hinzu:

    luser_relay = [email protected]
    local_recipient_maps =
    
  2. Mit der folgenden Antwort auf serverfault ( https://serverfault.com/questions/133190/Host-wildcard-subdomains-using-postfix ) habe ich hinzugefügt Folgendes (Beachten Sie, dass das Postfix-PCRE-Paket installiert sein muss):

    In /etc/postfix/main.cf:

     mydestination = pcre:/etc/postfix/mydestinations
    

    In/etc/postfix/mydestinations

    /.*/         ACCEPT
    

Dadurch werden ALLE E-Mails, die von Postfix verarbeitet werden, an den in Nummer 1 definierten konfigurierten lokalen Benutzer gesendet. Verwenden Sie diese Funktion also nur für die Entwicklung.

6
Gareth

"Da dies zu Entwicklungszwecken dient und ich mit anderen als meinen eigenen E-Mail-Adressen testen muss, muss der Befehl sendmail eine Möglichkeit bieten, eine E-Mail zu akzeptieren, sie jedoch nicht zuzustellen, sondern das Archiv befindet sich an einem Ort, an dem ich nachsehen kann daran."

Sie müssen es noch liefern. Sie müssen nur überschreiben, "wo" es geliefert wird.

"Was ist die einfachste Möglichkeit, einen Mail-Server so zu installieren, dass der Befehl sendmail ALLE Mails an ein lokales Verzeichnis weiterleitet? Das heißt, ich möchte, dass KEINE Mails ins Internet gesendet werden."

Dies kann nur mit dem Standard-Postfix-Installationspaket durchgeführt werden (kein Postfix-PCRE erforderlich).

1.) Bearbeiten Sie nach einem Tutorial hier 2 Zeilen in der Datei /etc/postfix/master.cf, um zu verhindern, dass E-Mails extern zugestellt werden (sie bleiben in der lokalen Mail-Warteschlange hängen):

smtp      unix  -       -       -       -       -       local
relay     unix  -       -       -       -       -       local

2.) Erstellen Sie eine Datei in /etc/postfix mit dem Namen virtual. Fügen Sie die folgende Zeile in diese Datei ein und ersetzen Sie <USERNAME> durch den Namen des lokalen Benutzerkontos, an das alle E-Mails zugestellt werden sollen:

/.*/    <USERNAME>

3.) Führen Sie den folgenden Befehl aus, um die richtige Datenbankdatei für Postfix zu erstellen und diese neue "virtuelle Aliaszuordnung" nachzuschlagen. Die neue, automatisch generierte Datenbankdatei heißt "virtual.db".

Sudo postmap /etc/postfix/virtual

4.) Fügen Sie die folgende Zeile zu /etc/postfix/main.cf hinzu

virtual_alias_maps = regexp:/etc/postfix/virtual

5.) Postfix neu starten:

Sudo service postfix restart

Jetzt werden alle E-Mails, unabhängig vom Absender, Empfänger oder Programm, die auf diesen SMTP-Server verweisen, lokal an den angegebenen Benutzer übermittelt. Es gibt jetzt zahlreiche Optionen zum Lesen/Abrufen dieser Nachrichten. Wenn Sie einen IMAP- oder POP3-Kurier (z. B. dovecot ) installieren, können Sie mit einem Mail User Agent (Thunderbird, Outlook usw.) eine Verbindung zu Ihrer lokalen Mailbox herstellen und die Nachrichten lesen.

5
ZParrish

Sehen Sie sich hier einen anderen coolen Ansatz an Wie Sie mit PHP gesendete E-Mails auf Ihrem lokalen Server abfangen .

$ Sudo mkdir /var/log/mail
$ Sudo nano /usr/local/bin/sendmail

Fügen Sie dieser neuen "sendmail" -Datei das folgende PHP -Skript hinzu:

#!/usr/bin/php
<?php
$input = file_get_contents('php://stdin');
preg_match('|^To: (.*)|', $input, $matches);
$filename = tempnam('/var/log/mail', $matches[1] . '.');
file_put_contents($filename, $input);

Fügen Sie sendmail_path = /usr/local/bin/sendmail zu /etc/php5/Apache2/php.ini hinzu.

$ Sudo chmod 755 /usr/local/bin/sendmail
$ Sudo chmod 777 /var/log/mail
$ Sudo /etc/init.d/Apache2 restart

Jetzt befinden sich alle Ihre Mails im Ordner /var/log/mail.

P.S. Möglicherweise möchten Sie auch Shell_exec("chmod 777 /var/log/mail/ -R"); zu /usr/local/bin/sendmail hinzufügen.

3
milkovsky

Ein anderer Ansatz besteht darin, einen "FakeSMTP" - Server auszuführen, einen plattformübergreifenden SMTP-Handler. Der eigentliche Zweck besteht darin, E-Mails zu empfangen, zu speichern und mit Ihrem konfigurierten E-Mail-Client anzuzeigen.

FakeSMTP Screenshot

0
tutuDajuju