Ich betreibe einen Postfix / Dovecot-Mailserver für den persönlichen Gebrauch. Es gibt nur eine Handvoll Postfächer, im Wesentlichen nur [email protected]
und [email protected]
.
Ich verwende die virtual
Datei häufig , um virtuelle Postfächer zu erstellen, an die weitergeleitet wird [email protected]
. Ich habe eine Reihe davon für Wegwerfkonten wie einmalige Einkäufe in Online-Shops, Online-Spiele, die ich ausprobieren möchte, ohne mir Gedanken über laufenden Spam zu machen usw. Dazu setze ich SSH und führe die folgenden Befehle aus:
sudo vim /etc/postfix/virtual
# add a line that looks like:
# # [email protected] [email protected]
sudo postmap virtual
sudo service postfix restart
Ich mache das so oft, dass ich den Prozess bis zu einem gewissen Grad automatisieren möchte. Ich habe überlegt, einfach ein Shell-Skript zu schreiben, das die virtuelle Mailbox und die reale Mailbox als Argumente verwendet und die Änderungen selbst vorgenommen hat, hoffe aber auf etwas, das noch mehr Hände weg ist.
Ich möchte in der Lage sein, eine E-Mail von [email protected]
einem anderen Postfach auf dem Server mit dem Namen des virtuellen Postfachs als Hauptteil der Nachricht zu senden . Das Problem wären die sudo
Anrufe, aber ich kann einen neuen Benutzer erstellen, dessen alleinige Verantwortung darin besteht, dies zu erledigen, der das erledigen sollte.
Meistens lautet die Frage: Wie würde ich ein Ereignis erstellen, das durch eine E-Mail ausgelöst wird? Gibt es irgendwo einen Dienst, der dies tut? Kann ich Postfix oder Dovecot so konfigurieren, dass diese E-Mail abgehört und Befehle für dieses Ereignis ausgeführt werden?
Antworten:
Das richtige Verfahren zum Ausführen eines Skripts (ich verwende ein Shell-Skript) beim Empfang einer E-Mail-Nachricht ist das folgende. Dazu muss die Konfigurationsdatei von postfix , master.cf (die sich in meinem Debian in / etc / postfix befindet ) geändert werden, indem die folgende Zeile hinzugefügt wird:
Hiermit wird postfix angewiesen , das Skript auszuführen (Sie müssen es ausführbar machen), wenn ein Ereignis auftritt.
Um festzulegen, wann das Skript ausgeführt werden soll, gehen Sie wie folgt vor: Angenommen, Sie möchten, dass es ausgeführt wird, wenn [email protected] eine Nachricht empfängt. Platzieren Sie die folgende Zeile
in der Datei /etc/postfix/address.txt ; Sie müssen eine geeignete Datenbank für Postfix erstellen , um diese Datei verwenden zu können. Dies erreichen Sie mithilfe von
Dies erzeugt als Ausgabe eine Datei mit dem Namen /etc/postfix/address.db . Gehen Sie nun zurück zur Datei /etc/postfix/main.cf und fügen Sie die folgende Zeile hinzu:
Starten Sie nun postfix neu .
und du solltest gut gehen.
quelle
sendmail
Direkt auf dem Server wird dies nicht auslösen.pickup
Option verwenden.Ich kann zwei offensichtliche Lösungen sehen.
Wenn Sie procmail als MDA auf Ihrem Server verwenden oder bereit sind, es zu verwenden, können Sie über die
|
Rezeptaktion von procmail (Pipe) ein beliebiges Skript für eine beliebige E-Mail ausführen . Es wird hoffentlich nicht als root gestartet, aber es sollte einfach sein, ein Skript zu erstellen, das die erforderliche Magie ausführt und das von einem relevanten Benutzer ohne Passwort als root aufgerufen werden kann. Die Ausgabe des Skripts könnte sogar in dieselbe E-Mail und die später zugestellte E-Mail zurückgeführt werden, indem das Rezept zu einer Filteraktion gemacht wird.Eine Alternative (die weniger praktische Wartung erfordern sollte) besteht darin , ein einzelnes Postfach
$recipient_delimiter
zu erstellen und Postfixes so zu konfigurieren , dass sie normalerweise nicht für diesen Zweck verwendet werden. zum Beispiel.
oder-
. Beachten Sie, dass Empfänger_Delimeter eine serverweite Einstellung ist. Angenommen, Sie richten die Mailbox ein[email protected]
und legen sie fest$recipient_delimeter = .
. Dies ermöglicht danndummy.<anything>@example.com
die Zustellung an das entsprechende lokale Postfach[email protected]
. Fügen Sie hinzu, um eine dieser Optionen zu deaktivierendummy.<whatever>@example.com
zu einer geeigneten Empfängertabelle mit einer Ablehnungsaktion. Der Nachteil ist, dass es sich um ein Sammelpostfach für das Präfix handelt. Daher sollten Sie das Präfix durch versehentliche oder Wörterbuchangriffe nur schwer stolpern lassen. Der Vorteil ist, dass im Normalfall (der Absender respektiert Ihre Wünsche und verkauft Ihre E-Mail-Adresse nicht weiter) dieser Ansatz wartungsfrei ist. Sie können Ihr Präfix später jederzeit ändern und die Kombinationen explizit auflisten, für die Sie weiterhin E-Mails erhalten möchten .quelle
Falls der Link ausfällt, finden Sie hier eine Zusammenfassung.
Gehen Sie zuerst zu
master.cf
Ihrem Skript "myhook" und registrieren Sie es, indem Sie die folgende Zeile hinzufügen:myhook unix - n n - - pipe flags=F user=www-data argv=/path/to/script.sh ${sender} ${size} ${recipient}
Bearbeiten Sie auch die SMTP-Zeile, um Postfix anzuweisen, den Filter für alle E-Mails auszuführen, die über die SMTP-Zustellung eingehen:
smtp inet n - - - - smtpd -o content_filter=myhook:dummy
Bitte beachten Sie, dass der Filter nicht ausgelöst wird, wenn Sie E-Mails mit dem Befehl "sendmail" senden. Fügen Sie in diesem Fall die Option nach der Versandart "Abholung" hinzu:
pickup fifo n - - 60 1 pickup -o content_filter=myhook:dummy
Postfix neu starten:
postfix reload
Machen Sie Ihr Skript für jedermann lesbar und ausführbar:
chmod +rx script.sh
Beachten Sie, dass das Skript immer für eingehende E-Mails ausgelöst wird. Um die genaue Adresse anzugeben, siehe @MariusMatutiae Antwort.
quelle