2009-11-22 16 views
5

ich eine Web-Anwendung schreibe, die E-Mail-Nachrichten an Benutzer interne E-Mail-Adressen empfangen muss, können Administratoren genehmigen sie, und dann nach vorne Benutzers externen Mailbox entspricht.Postfix Nachricht Haken erhielt

Ich habe Postfix für den Nachrichtenempfang Task installiert und konfiguriert. Es verwendet virtuelle E-Mail-Adressen und meine vorhandene Datenbank, in der Benutzer-E-Mail-Adressen gespeichert sind. Der lokale E-Mail-Speicher ist maildir und ich benutze den virtuellen MDA von Postfix.

Grundsätzlich möchte ich jedes Mal ein Skript ausführen, wenn eine neue Nachricht empfangen wird, und für welchen Benutzer (Maildir Message ID wäre auch sehr hilfreich). Dann konnte ich die Nachricht aus dem Python-Code lesen (Python hatte ein Modul für Maildir-Nachrichtenboxen) und es in die Datenbank einfügen. Ich kann mich drei Möglichkeiten, dies zu tun:

  • Iterierte Benutzer maildirs und überprüfen, ob neue Nachrichten vorhanden sind, aber es wäre für große Anzahl von Benutzern unwirksam.
  • Verwenden Sie dbmail und überprüfen Sie dann, ob neue Nachrichten in der Datenbank vorhanden sind (das wäre schneller, aber ich müsste alles von Grund auf neu konfigurieren). Außerdem können vorhandene Benutzerdatentabellen nicht verwendet werden.
  • schreibe einen Wrapper um maildrop/virtual, um Nachrichten in db und maildir zu speichern, aber ich würde einen Weg brauchen, um zu überprüfen, ob die empfangene Nachricht gültig ist und erfolgreich von real MDA gespeichert wurde.

Irgendwelche Vorschläge geschätzt!

Antwort

5

Als Antwort auf meine eigene Frage, habe ich Postfix content_filter mit gesetzt X-Flag im Rohr und Prozess manuell Adresse und Nachricht empfangen. Da ich nicht auf Nachrichten in Maildir zugreifen musste, funktioniert dieser Ansatz gut für mich.

8

In der /etc/aliases Datei können Sie ein Programm specifiy, die jedesmal, wenn ein Benutzer eine E-Mail recieves ausgeführt wird. Dieses Programm ruft die Mail auf stdin ab. Sie müssen also nicht abfragen und Ihr Programm wird sofort ausgeführt.

+0

Dies wäre schön Ansatz sein, aber ich bin mit virtuellem Relaismechanismus. – fest