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


7

Ich habe eine Entwicklungs-Ubuntu-Server-VM (12.04.1), mit der ich PHP-Sites und E-Commerce-Sites (wie Magento usw.) entwickle.

Da dies zu Entwicklungszwecken dient und ich mit anderen E-Mail-Adressen als meinen eigenen testen muss, muss der Befehl sendmail eine E-Mail akzeptieren, aber nicht tatsächlich zustellen, sondern das Archiv ist ein Ort, an dem ich sie anzeigen kann es.

Was ist der einfachste Weg, einen Mailserver so zu installieren, dass der Befehl sendmail ALLE E-Mails an ein lokales Verzeichnis weiterleitet? dh ich möchte NICHT, dass E-Mails ins Internet geliefert werden.

Ich habe die in dieser Frage beschriebenen Schritte ausprobiert ( SMTP-Server, um ALLE E-Mails an user @ localhost zu senden ), aber es scheint nicht zu funktionieren. In meinem (lokalen) Postfach wird eine Fehlermeldung angezeigt , die besagt, dass meine Testnachricht nicht zugestellt werden kann (zB jemand@gmail.com)

Antworten:


7

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

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

    luser_relay = MYLOCALUSER@localhost
    local_recipient_maps =
    
  2. Unter Verwendung der folgenden Antwort auf Serverfehler ( /server/133190/host-wildcard-subdomains-using-postfix ) habe ich Folgendes hinzugefügt (beachten Sie, dass das Paket postfix-pcre installiert sein muss):

    In /etc/postfix/main.cf:

     mydestination = pcre:/etc/postfix/mydestinations
    

    In / etc / postfix / mydestinations

    /.*/         ACCEPT
    

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


5

"Da dies zu Entwicklungszwecken dient und ich mit anderen als meinen eigenen E-Mail-Adressen testen muss, muss der Befehl sendmail eine E-Mail akzeptieren, aber nicht tatsächlich zustellen. Das Archiv befindet sich also 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 der einfachste Weg, einen Mailserver so zu installieren, dass der Befehl sendmail ALLE E-Mails an ein lokales Verzeichnis weiterleitet? Das heißt, ich möchte NICHT, dass E-Mails an das Internet gesendet werden."

Dies kann tatsächlich nur mit dem Standard-Postfix-Installationspaket durchgeführt werden (kein Postfix-PCR erforderlich).

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

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

2.) Erstellen Sie eine Datei in /etc/postfixaufgerufen virtual. Fügen Sie die folgende Zeile in diese Datei ein und ersetzen Sie sie <USERNAME>durch den lokalen Benutzerkontonamen, an den alle E-Mails gesendet werden sollen:

/.*/    <USERNAME>

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

sudo postmap /etc/postfix/virtual

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

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 gesendet. Es gibt zahlreiche Optionen zum Lesen / Abrufen dieser Nachrichten. Wenn Sie einen IMAP- oder POP3-Courrier (z. B. Dovecot ) installieren , können Sie einen Mail-Benutzeragenten (Thunderbird, Outlook usw.) verwenden, um eine Verbindung zu Ihrem lokalen Postfach herzustellen und die Nachrichten zu lesen.


Stellen Sie sicher, dass das <USERNAME>in erwähnt wird etc/aliases, sonst erhalten Sie Fehler. Wenn Sie einen Maildir für diesen Benutzer verwenden möchten, müssen Sie die Zeilen home_mailbox = Maildir/und mailbox_command = zu Ihrem/etc/postfix/main.cf
chiborg

3

Sehen Sie hier einen anderen coolen Ansatz. So fangen Sie E-Mails ab, die mit PHP auf Ihrem lokalen Server gesendet wurden .

$ 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);

Hinzufügen sendmail_path = /usr/local/bin/sendmailzu /etc/php5/apache2/php.ini.

$ 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 /var/log/mailOrdner.

PS Auch möchten Sie vielleicht hinzufügen shell_exec("chmod 777 /var/log/mail/ -R");zu/usr/local/bin/sendmail


Das einzige Problem bei dieser Lösung besteht darin, dass Sie den von Ihnen installierten E-Mail-Client nicht zum Lesen der E-Mails verwenden können, da das Skript die E-Mails nur in einem Verzeichnis ablegt. Wenn Sie die E-Mails beispielsweise über pop3 oder imap bereitstellen können, können Sie Ihre E-Mails in tatsächlichen E-Mail-Clients testen.
Gareth

Vielen Dank. Ich habe auch Ihre Lösung ausprobiert. Es hat funktioniert, danke! Aber als ich es benutzte, konnte ich nur E-Mails von Benutzern mit dem Hostnamen MYLOCALUSER sehen. Aber ich wollte E-Mails testen, die unterschiedliche Konten haben.
Milkovsky

0

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

FakeSMTP Screenshot


0

Ich habe genau eine ähnliche Umgebung. In den meisten Online-Dokumentationen zum Einrichten von Postfix wird jedoch empfohlen, während des Installationsvorgangs die Option Internet Site auszuwählen . Ich denke, dies ist ein Overkill für einen lokalen Entwicklungsserver nur auf meinem Computer. Also mache ich für mich Folgendes

  1. Angenommen, /etc/hostnameenthält MyDevMachine; Ich stelle sicher, dass /etc/hostsdas einen Eintrag enthält127.0.1.1 MyDevMachine

  2. Wenn ich Postfix installiere, würde ich nur Lokal auswählen und dann für die Domäneneinstellung sicherstellen, dass diese Option festgelegt MyDevMachineist.

  3. Weil ich möchte, dass alle E-Mails an meinen Entwicklungsbenutzer gesendet werden und der Name dieses Entwicklungsbenutzers unter Ubuntu lautet devuser; Ich erstelle daher eine Datei namens /etc/postfix/vmaps. Der Inhalt dieser Datei ist /.*/ devuser. Dies würde die Zustellung aller E-Mails ermöglichendevuser

  4. Ich führe dann das aus sudo postmap /etc/postfix/vmaps, das schließlich erstellt vmaps.db(eine Art Aktivierung dieser virtuellen Zuordnung).

  5. Suchen Sie die Datei /etc/postfix/main.cfund hängen Sie sie mit der folgenden Codezeile an (wodurch Postfix angewiesen wird, die zuvor erstellte virtuelle Zuordnung zu verwenden):virtual_alias_maps = regexp:/etc/postfix/vmaps

  6. Starten Sie Postfix neu sudo service postfix restart

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.