Andreas: mit email Script "anstoßen"

Hallo!
Nur so allgemein, wie funktioniet sowas? Es gibt ja die Möglichkeit von Auto-Reply mails, die wird ja auch von einer mail angestoßen. Womit kann man was vergleichbares für Scripte machen? Wie unterscheidet sich das für eingehende/ausgehende mails?
Ist nur ein allgemeinses Interesse, soll auf Linux funktionieren, hab nur noch nicht mal eine Idee mit welcher Software sowas überhaupt zu realisieren ist! Bin für jeden Tipp dankbar!
Viele Grüße
Andreas

  1. Hallo!
    Nur so allgemein, wie funktioniet sowas? Es gibt ja die Möglichkeit von Auto-Reply mails, die wird ja auch von einer mail angestoßen. Womit kann man was vergleichbares für Scripte machen? Wie unterscheidet sich das für eingehende/ausgehende mails?
    Ist nur ein allgemeinses Interesse, soll auf Linux funktionieren, hab nur noch nicht mal eine Idee mit welcher Software sowas überhaupt zu realisieren ist! Bin für jeden Tipp dankbar!
    Viele Grüße
    Andreas

  2. Moin!

    Nur so allgemein, wie funktioniet sowas? Es gibt ja die Möglichkeit von Auto-Reply mails, die wird ja auch von einer mail angestoßen. Womit kann man was vergleichbares für Scripte machen? Wie unterscheidet sich das für eingehende/ausgehende mails?

    Tja, wenn's nur allgemein sein soll, kann sogar ich das beantworten. :)

    Wenn du etwas getan haben willst beim Eintreffen einer Mail, dann benötigst du zuallererst einen Server, bei dem die Mail eintreffen kann.

    Nun gibts da zwei Möglichkeiten: Erstens einen POP3-Server. Ok, der liefert die Mail nur aus, aber dort wird die Mail irgendwann mal erscheinen und kann von einem Script per Cron-Job ausgelesen und entsprechend verarbeitet werden. Diese Methode wäre zu bevorzugen, wenn du eigene Scripte nur auf einem anderen Server laufen lassen kannst - irgendwie muß dein Script ja mitkriegen, daß Mails da sind, und das geht in diesem Falle (daß ein anderer Server die Mailbox hat) nur durch ständiges Nachfragen.

    Der schönere, weil direkte Weg ist, daß du einen SMTP-Server hast, an den die Mail geschickt wird. Der kann bei Eintreffen der Mail diese filtern. Und das filtern beschränkt sich nicht nur aufs Wegwerfen von Spam, sondern kann im Prinzip alles umfassen, was man programmieren kann. Ich schätze mal, Postfix wäre ein Ansatzpunkt dafür. Das ist so ein Mailfilter. Und du konfigurierst einfach, welche Scripte beim Eintreffen von Post für einen bestimmten Adressaten ausgeführt werden sollen.

    Ach ja: Damit wären die eingehenden Mails abgedeckt - ausgehende Mails kann man dann ja prima per Script selbst generieren. Wie das geht, weiß jeder Formmailer. Es gibt allerdings auch einfachere Methoden, indem man einfach konfiguriert, daß ein Auto-Reply gesendet werden soll - ganz ohne eigenes Script. :)

    Konkrete Fragen dann bitte nicht an mich, ich gebe hier nur hörensagen weiter und bin kein Mailadmin. :)

    - Sven Rautenberg

    1. Hi!
      Ja, da hast Du wohl Recht, nur die erste Variante mit Cron hat bei mir wenig Sinn, da ich im Prinzip einen Cron nur einmal am Tag ausführen darf.
      Die 2. Variante wird aber komplizierter zu implementieren sein, und ich vermute das normalerweise SMTP Server und Apache bei größeren providern nicht auf derselben Maschine laufen, würde ich jetzt mal raten. Weiß aber nicht wie sich das auf das ausführen von Scripten auswirkt. Vor allem mit virtuellen Apache-Hosts stelle ich mir das nicht so einfach vor. Wobei es ja anders herum auch funktioniert, halt Übergabe von PHP an Sendmail oder SMTP-Server, naja.

      Viele Grüße
      Andreas

      1. Moin!

        Ja, da hast Du wohl Recht, nur die erste Variante mit Cron hat bei mir wenig Sinn, da ich im Prinzip einen Cron nur einmal am Tag ausführen darf.
        Die 2. Variante wird aber komplizierter zu implementieren sein, und ich vermute das normalerweise SMTP Server und Apache bei größeren providern nicht auf derselben Maschine laufen, würde ich jetzt mal raten. Weiß aber nicht wie sich das auf das ausführen von Scripten auswirkt. Vor allem mit virtuellen Apache-Hosts stelle ich mir das nicht so einfach vor. Wobei es ja anders herum auch funktioniert, halt Übergabe von PHP an Sendmail oder SMTP-Server, naja.

        Du wolltest theoretisch und allgemein informiert werden. Wenn deine konkreten Möglichkeiten es nicht erlauben, daß du gewisse Dinge machen kannst, dann ist das zwar schade, aber durch Investition in entsprechende Serverpakete durchaus zu umgehen. :) Es gibt wirklich nichts schöneres, als auf einem Server ROOT-Zugang zu haben. ;)

        - Sven Rautenberg

    2. Moin,

      Ich schätze mal, Postfix wäre ein Ansatzpunkt dafür. Das ist so ein Mailfilter.

      Nein, der Filter den du meinst heisst procmail. Postfix ist ein MTA wie sendmail.

      Im übrigen wäre auch procmail schon zu viel Aufwand. Sendmail zum Beispiel kennt die Datei aliases. Da kann man Zuordnungen von einer email-Addresse auf alle möglichen Dinge eintragen: andere email-Konten, Dateien und eben auch Kommandos. Mehr verrät   man aliases

      --
      Henryk Plötz
      Grüße aus Berlin

  3. Hi Andreas,

    Nur so allgemein, wie funktioniet sowas? Es gibt
    ja die Möglichkeit von Auto-Reply mails, die wird
    ja auch von einer mail angestoßen.
    Womit kann man was vergleichbares für Scripte machen?
    Wie unterscheidet sich das für eingehende/ausgehende
    mails?

    bei (von Deinem Server) ausgehenden Mails (etwa einem
    Form-Mailer) hast Du ja selbst die volle Kontrolle,
    was noch alles geschehen soll.
    Deshalb konzentriere ich mich mal auf den anderen Teil.

    Wenn auf einem UNIX-System eine Mail an eine Benutzer-
    kennung eingeht, dann gibt es dort üblicherweise die
    Möglichkeit, mit Hilfe eine Konfigurationsdatei auf
    eingehende Mails zu reagieren. Diese Datei heißt in
    dem mir bekannten Fall ".forward" und liegt im
    Heimatverzeichnis der Benutzerkennung.
    Das shell-Kommando "man forward" (ohne den Punkt!)
    sollte Dir weitere Informationen liefern können.

    Üblicherweise schreibt man dort einfach eine Mail-
    Adresse hinein - was dann bewirkt, daß alle ankom-
    menden Mails an diese Adresse weitergeleitet werden.
    Alternativ kann man aber auch einen Aufruf eines
    Programms hinein schreiben (die genaue Syntax habe
    ich gerade nicht im Kopf), in welches die Mail von
    stdin aus hinein gepiped wird.

    Dieses Programm muß dann natürlich das entsprechende
    Mail-Format lesen, also Header interpretieren können

    • dann kann es aber auch alles tun, wozu es Lust hat:
      Spam-Filter, Auto-Responder, irgendwas.
      Ich habe mal sehr rudimentär so etwas selbst gebaut,
      aber nicht ansatzweise einen korrekten Parser für das
      Mail-Format dabei realisiert, weil ich nur auf Mails
      reagieren wollte, die ich selbst auf anderen Maschinen
      unseres Netzwerks per Programm erzeugt habe.

    So ein automatischer Mail-Parser in Perl wäre sicher
    mal ein schöner Feature-Artikel ... Christian? ;-)

    Viele Grüße
          Michael

    1. Hallo!

      Wenn auf einem UNIX-System eine Mail an eine Benutzer-
      kennung eingeht, dann gibt es dort üblicherweise die
      Möglichkeit, mit Hilfe eine Konfigurationsdatei auf
      eingehende Mails zu reagieren. Diese Datei heißt in
      dem mir bekannten Fall ".forward" und liegt im
      Heimatverzeichnis der Benutzerkennung.
      Das shell-Kommando "man forward" (ohne den Punkt!)
      sollte Dir weitere Informationen liefern können.

      Aber man kann ja nicht einfach irgendwelche Tools verwenden, das müßte ja in den SMTP-Server integriert sein. Bekommt Unix das überhaupt zwangsläufig mit wenn eine mail eingeht? Was hat das mit dem OS zu tun?

      Üblicherweise schreibt man dort einfach eine Mail-
      Adresse hinein - was dann bewirkt, daß alle ankom-
      menden Mails an diese Adresse weitergeleitet werden.
      Alternativ kann man aber auch einen Aufruf eines
      Programms hinein schreiben (die genaue Syntax habe
      ich gerade nicht im Kopf), in welches die Mail von
      stdin aus hinein gepiped wird.

      Aber die mails selbst geht dabei ja nicht verloren, oder? Mit geht es gar nicht so sehr um den Inhalt, ich möchte nur genre mit einer mail ein Script in Gang setzen können. Wenn ich natürlich noch irgendwelche Daten damit übermitteln könnte, wäre das schon prima ;-)
      Besteht denn wenigstens die Möglichkeit, das ich irgendweine Art von MailID in das Script übergeben kann? Dann könnte ich ja manuell uz.B. pber php die pop3 Box abfragen und mir die Daten auslesen. Oder wenigstesn den Absender, Zeitpunkt oder was auch immer, womit ich später die mail eindeutig identifizieren kann, wenn ich halt Daten daraus möchte.

      Dieses Programm muß dann natürlich das entsprechende
      Mail-Format lesen, also Header interpretieren können

      • dann kann es aber auch alles tun, wozu es Lust hat:
        Spam-Filter, Auto-Responder, irgendwas.

      Hauptdsache ich kann die email aus dem Programm abfragen, das würde mir reichen.

      Ich habe mal sehr rudimentär so etwas selbst gebaut,
      aber nicht ansatzweise einen korrekten Parser für das
      Mail-Format dabei realisiert, weil ich nur auf Mails
      reagieren wollte, die ich selbst auf anderen Maschinen
      unseres Netzwerks per Programm erzeugt habe.

      IMAP-Funktionen von PHP bieten da ja einige Möglichkeiten, aber halt nur beim Abfragen einer mailbox, mit den Daten direkt ist das bestimmt nicht so einfach, wie gesagt muß das auch nicht sein!

      Grüße
      Andreas

      1. Hi,

        Das shell-Kommando "man forward" (ohne den Punkt!)
        sollte Dir weitere Informationen liefern können.
        Aber man kann ja nicht einfach irgendwelche Tools
        verwenden, das müßte ja in den SMTP-Server
        integriert sein.

        Das ist es wohl auch ... ich kenne nicht genügend
        verschiedene UNIXe, um das genauer beschreiben zu
        können. Bei den dreien, die ich selbst schon ver-
        wendet habe, war es immer so.

        Bekommt Unix das überhaupt zwangsläufig mit wenn
        eine mail eingeht? Was hat das mit dem OS zu tun?

        Nicht mit dem Betriebssystem - mir dem darauf stan-
        dardmäßig installierten Mail-System (bei UNIX ist
        m. E. immer eines dabei, um Mails zwischen Benutzer-
        kennungen austauschen zu können).

        Alternativ kann man aber auch einen Aufruf eines
        Programms hinein schreiben (die genaue Syntax
        habe ich gerade nicht im Kopf), in welches die
        Mail von stdin aus hinein gepiped wird.
        Aber die mails selbst geht dabei ja nicht verloren,
        oder?

        Wenn Dein Skript sie nicht speichert, schon ... das
        übernimmt dann die Zuständigkeit für die Annahme.

        Mit geht es gar nicht so sehr um den Inhalt,
        ich möchte nur genre mit einer mail ein Script in
        Gang setzen können.

        Genau das passiert eben, wenn es in .forward als
        Mail-Verarbeiter definiert ist.

        Wenn ich natürlich noch irgendwelche Daten damit
        übermitteln könnte, wäre das schon prima ;-)

        Du solltest insbesondere verhindern, daß _jeder_ per
        Mail Dein Programm starten kann ... deshalb sollte
        Dein Skript die ankommende Mail analysieren und nur
        im Falle bestimmter Inhalte etwas tun.

        Besteht denn wenigstens die Möglichkeit, das ich
        irgendweine Art von MailID in das Script übergeben
        kann?

        Lies den entsprechenden RFC über das Format einer Mail.

        Hauptdsache ich kann die email aus dem Programm
        abfragen, das würde mir reichen.

        Siehe oben.

        Viele Grüße
              Michael

      2. Moin,

        Aber man kann ja nicht einfach irgendwelche Tools verwenden, das müßte ja in den SMTP-Server integriert sein.

        Der SMTP-Server schaut halt, bevor er dir eine Mail ins Postfach legt, nach ob du eine .forward in deinem Heimatverzeichnis hast, und falls ja liest er sie aus und leitet die Mail an die dort eingetragene Addresse weiter (daher der Name .forward). Wenn die Mailaddresse mit einem | beginnt, wird sie als Kommando interpretiert und das Kommando ausgeführt. Das dadurch gestartete Programm bekommt dann die Mail auf der Standardeingabe.

        Bekommt Unix das überhaupt zwangsläufig mit wenn eine mail eingeht?

        Das hat nichts mit Unix zu tun. Der Mailserver nimmt die Mail an, und ja, der kriegt es mit wenn er eine Mail annimmt ;)

        Aber die mails selbst geht dabei ja nicht verloren, oder?

        Kommt drauf an. Wenn du es so mit .forward machst, dann sendet der Mailserver die Mail an das Programm und damit ist die Sache für ihn erledigt. Das Programm müsste die Mail dann noch irgendwo ablegen, wenn du sie behalten willst.

        Mit geht es gar nicht so sehr um den Inhalt, ich möchte nur genre mit einer mail ein Script in Gang setzen können.

        Ah ok, dann willst du wahrscheinlich doch procmail benutzen.

        Besteht denn wenigstens die Möglichkeit, das ich irgendweine Art von MailID in das Script übergeben kann?

        Das Programm kriegt die gesamte Mail auf der Standardeingabe und kann damit machen was es will.

        --
        Henryk Plötz
        Grüße aus Berlin