Postfix / Dovecot Verständnis (und script ausführen)

Leandros

New Member
Hallo,

ich habe eine Installation von Postfix in Verbindung mit Dovecot sowie Spamassassin um meine Mails per "virtual_transport = dovecot" über IMAP verfügbar zu machen und per "local_transport = virtual" in mboxes zu verteilen.

Müsste, wenn ich es richtig Verstanden habe, nun so aussehen: Postfix -> Dovecot -> Spamassassin -> Postfach.
Nun möchte ich ein Script ausführen, nach dem ich eine Mail in eine meiner Mailboxen bekommen habe.

Soll dann so aussehen: Postfix -> Dovecot -> Spamassassin -> Custom Script -> Postfach
Da ich nicht möchte, das das script invoked wird wenn Spamassassin die Mail rausgefiltert hat.

Hatte bereits an "content_filter in postfix gedacht, aber darüber läuft doch ClamAV + AmaVis + Spamassassin?
Irgendwie blick ich da noch nicht ganz durch, es funktioniert aktuell soweit (Postfix + Dovecot, Spamassassin muss ich noch Einrichten).

Könnte das so Funktionieren? Habe ich Denkfehler? Könnte mir jemand Tipps zum Erreichen meiner Ziele geben? ;)


Danke!
Mit freundlichen Grüßen,
Leandros
 
Last edited by a moderator:
Ich kenne Spamassassin per Amavisd-new (der lässt dann auch gleich noch einen Virenscanner laufen wenn du willst) so:

Postfix => Amavisd-new => Postfix => Dovecot => Postfach

Das custom script müsste dann von Dovecot ausgeführt werden. Da Spamassassin schon viel früher in der Kette steht, kommt eine ausgefilterte Mail auch da gar nicht an. Zum wegsortieren sind dann auch schon Spam- und Virenscanner-Header gesetzt.
 
Stimmt, ja, ist richtig.
Postfix -> Spamassassin (inkl AmaVis und ClamAV) -> Postfix -> Dovecot -> Postfach.

Man kann allerdings auch Spamassassin als Standalone Deamon laufen lassen, was dann Postfix -> Spamassassin -> Dovecot -> Postfach ist.

Beispiele für zweiteres: https://www.allthingsdigital.nl/2011/06/13/configuring-spamassassin-on-debian/
Für ersteres: http://www.df.eu/de/service/df-faq/cloudserver/anleitungen/spam-und-virenschutz-mit-postfix-debian/

(Da ich keine Lust habe die Configs nu hier hin zu kopieren :D).

Naja, nun zu meinem Problem mit dem Script, wie könnte ich von Dovecot ein Script ausführen lassen? Am liebsten würde ich ein .sh oder direkt meine php implementation ausführen.
 
Wenn alle Mails an das Script gehen sollen, dann könntest du das auch so machen und das beim Zustelldurchlauf im Postfix aufsplitten:
Code:
Postfix => Amavisd-new => Postfix => Dovecot => Postfach
                            ||
                            \\=> Script

Das gilt natürlich nur für ein Szenario in dem du das Script nicht auf die Zustellung im Postfach Winfluss nehmen lassen willst.
Wenn das script die Zustellung beeinflussen soll, dann brauchst du jemanden, der mehr Ahnung von Dovecot hat als ich für Ratschläge. ;-)
 
Last edited by a moderator:
Ne, das wäre eine Möglichkeit. Das Script soll mir nur eine Push Benachrichtigung auf mein iPhone schicken. :D
Wie kann ich das denn in Postfix splitten?
 
Ich brauch eigentlich erstmal nur die Benachrichtigung, optimal wäre natürlich an welche E-Mail die Mail ging und von wem sie kommt + Betreff.
 
Nur für die Benachrichtigung über neue Mails würde schon ein Cronjob reichen, der zb. im Minutentakt läuft und prüft, ob der Ordner für neue Mails leer ist oder nicht. Sowas ist in 5 Minuten gebastelt und kann bei Bedarf angepaßt oder erweitert werden (Betreffs filtern o.ä.)
 
Stimmt, wie stumpf. In welchem Ordner befinden sich denn die neuen E-Mails? Nutz mbox, kein maildir.
 
Last edited by a moderator:
Kommt auf deine Konfiguration an. Bei mir liegen die neuen Mails unter /var/vmail/<Domain>/<User>/new
 
Ja, das ist maildir format.
Bei mir liegen sie auch unter /var/vmail/<domain>/<user>/, allerdings sieht der Ordner so aus:


... Ok, bei mir gibt es auch einen new Ordner. :D

In dem allerdings nicht drin liegt.
So sieht die mbox Ordner struktur aus.

cur dovecot.index dovecot.index.cache dovecot.index.log dovecot.mailbox.log dovecot-uidlist dovecot-uidvalidity dovecot-uidvalidity.52529b89 new subscriptions tmp

Daher fällt die Lösung raus.


Edit: Gar nicht wahr, ich nutz auch maildir. Aber warum zur Hölle ist new leeer?
 
Last edited by a moderator:
Gar nicht wahr, ich nutz auch maildir. Aber warum zur Hölle ist new leeer?

Weil du hier vermutlich zwischen neu und ungelesen unterscheiden mußt. Kommt bei mir eine neue Mail auf dem Server an, landet die im Ordner new. Sobald ich den Mailserver kontaktiere (Webmail, Client...ist egal), wird die Mail (noch ungelesen) vom Ordner new in den Ordner cur verschoben.
 
Last edited by a moderator:
Jo, ist mir auch aufgefallen. :D

In "new" ist die Mail nur verdammt kurz ...
Und wenn ich jede Minute den cur ordner checke, bekomme ich jede Minute eine Benachrichtigung. Is irgendwie uncool.

Code:
#include <iostream>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>

using namespace std;

string directories[] = { "trancuted" };

bool endsWith(std::string const &fullString, std::string const &ending)
{
    if (fullString.length() >= ending.length()) {
        return (0 == fullString.compare (fullString.length() - ending.length(), ending.length(), ending));
    } else {
        return false;
    }
}

int main(int argc, char *argv[]) {
    for (int i = 0; i < 5; i++) {
        DIR *dir = opendir(directories[i].c_str());
            if(dir) {
                struct dirent *ent;
                string fileName;
                string ending(",S");
                while((ent = readdir(dir)) != NULL) {
                    fileName = ent->d_name;
                    if ((fileName.compare(".") == 0) || (fileName.compare("..") == 0)) {
                        // Skip!
                    } else {
                        if (!endsWith(fileName, ending)) {
                            cout << "New Mail" << endl;
                        }
                    }
                }

            } else {
                cout << "Error opening directory" << endl;
            }
    }
    
    return 0;
}
 
Ja, Debian 7 Wheezy ist aber nicht auf 2.2. Sonst hast du recht.

Das funktioniert alles irgendwie nicht wirklich...
 
Was spricht denn gegen ein Script, was entweder die mtime vom "cur"-Folder prüft, oder die Anzahl der Dateien darin prüft und bei einem diff zum vorherigen Durchlauf die Benachrichtigung schickt?
 
Diff zum Vorherigen durchlauf hatte ich auch schon dran gedacht, jedoch hast du mich erst jetzt auf die Idee gebracht, das ich einfach die Anzahl der Dateien in dem Ordner prüfen könnte. :D
 
Back
Top