Durchsuche Mail und falls Bestimmter Inhalt vorhanden sende Nachricht mittels Telegram/Schicke Nachricht nach reboot

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Zur Lösung

    Hallo zusammen.

    Ich versuche grad mir einen Dienst einzurichten welcher die eingehenden Mails nach einem bestimmten Betreff durchsucht und falls dieser Betreff vorhanden ist mir eine Telegramnachricht schickt.

    Ich arbeite nach dieser Anleitung.

    Das dort gezeigte Script sieht jedoch vor bei zutreffender Suche den Anhang eines Mails lokal zu speichern. Diese Funktion brauch ich jedoch nicht und möchte sie durch folgenden Befehl ersetzen:

    Code
    curl -s -k "https://api.telegram.org/bot<BOT-ID>/sendMessage" -d text="Mail Erhalten" -d chat_id=CHATID

    Leider habe ich da absolut keinen Plan was ich davon modifizieren kann/darf/muss und wäre um eine Hilfestellung sehr froh. Und interpretiere ich das richtig dass das Script endlos wiederholt wird? Also müsste ich es nur in den Autostart eintragen damit das im Hintergrund läuft?

    desweiteren Möchte ich den oben genannten Befehl bei jedem neustart Durchführen um eine Benachrichtigung zu erhalten. Habe es schon mit div. methoden probiert. Mit Crontab direkt als Befehl oder Script. Mittels Script und init.d aber habe leider nie eine Nachricht nach dem Neustart erhalten. Irgendwo hab ich einen Denkfehler drin...

    Crontab:

    Code
    @reboot /home/pi/Autostart/autostart.sh

    autostart.sh:

    Bash
    #!/bin/bash
    curl -s -k "https://api.telegram.org/bot<BOT-ID>/sendMessage" -d text="PiHole wieder Online!" -d chat_id=CHATID
    exit 0

    autostart.sh habe ich natürlich auch mittels chmod ausführbar gemacht. Wenn ich das script mittels Befehlszeile starte funktioniert es einwandfrei. Nur beim reboot krieg ich nix.

    Grüsse Apop

    Ich suche nicht nach einer fertigen Lösung sondern nach dem Weg dahin ;)

    6 Mal editiert, zuletzt von Apop85 (17. Dezember 2017 um 15:14)

  • Durchsuche Mail und falls Bestimmter Inhalt vorhanden sende Nachricht mittels Telegram/Schicke Nachricht nach reboot? Schau mal ob du hier fündig wirst!

  • So weiter gehts.

    Das zweite Problem habe inzwischen lösen können.

    In der rc.local Datei habe ich folgendes eingetragen:

    Code
    sleep 10
    bash /home/pi/Autostart/autostart.sh &

    Autostart.sh beinhaltet folgendes:

    Bash
    #!/bin/bash
    curl -s -k "https://api.telegram.org/botBOTID/sendMessage" -d text="PiHole ist wieder Online!" -d chat_id=CHATID
    exit 0

    Nun erhalte ich eine Telegramnachricht beim Reboot.

    Ich versuche mich jetzt mal am Script für die Benachrichtigung bei empfangen eines Mails.

    Ich suche nicht nach einer fertigen Lösung sondern nach dem Weg dahin ;)

  • Du vermischst leider unterschiedliche print's, was darauf hindeutet dass du den Unterschied nicht kennst?

    print "bla blub" ist python2

    print("bla blub") ist python3

    Wenn du print("bla blub") in python2 ausführst kommt zwar keine Fehlermeldung, die Ausgabe erscheint aber in Form einer Tuple.

    Bedeutet also: print() ist ein Funktionsaufruf, in python2 ist es aber keine Funktion.


    Das von dir verwendete Script scheint auch nicht deinen Fingern entsprungen zu sein, erscheint mir für dein Vorhaben aber auch viel zu aufgeplüstert.

    Guck dir mal das an: Server/PI Steuerung via EMail

  • Hey meigrafd

    Ich beherrsche python genau genommen gar nicht ;). Die Scripts die ich verwende kann man wohl eher "Zusammengeschuhstert" nennen. Ich suche nach Scripts deren Funktion in etwa dem entspricht was ich will und versuche diese dann entsprechend zu modifizieren mittels try&error ^^.

    Am besten beherrsche ich wohl das "Progeammieren" von Stapelverarbeitungsprogrammen (Batch) mit Bash und VB hab ich nur ganz wenig erfahrung, kann dadurch aber einigermassen ableiten was die jeweiligen Scripts machen.

    Und ja das Script dass ich oben drin hab ist aus der Anleitung die ich da verlinkt habe. Es entspricht mehr oder weniger dem was ich möchte ausser halt dass ich die Attachments nicht benötige. Daher dachte ich versuche das entsprechend zu modifizieren damit es ne Telegrammsg rausschickt anstatt ein attachment zu downloaden.

    Danke dass du mich darauf aufmerksam machst. Das hätte mich wohl Stunden gekostet rasuzufinden was wohl nicht funktioniert ^^. Werd mir den Beitrag den du verlinkt hast mal ansehen.

    Ich suche nicht nach einer fertigen Lösung sondern nach dem Weg dahin ;)

  • Wenn du print("bla blub") in python2 ausführst kommt zwar keine Fehlermeldung, die Ausgabe erscheint aber in Form einer Tuple.

    [Klugscheiss]

    Hier sind es einfach nur Klammern ohne Effekt oder Bedeutung. Erst mit print("foo", "bar") wäre es ein tuple. Ich weiß, habe ich selbst mal falsch gemacht und nicht richtig gewusst.:angel:

    [/Klugscheiss]

  • [Klugscheiss]

    Hier sind es einfach nur Klammern ohne Effekt oder Bedeutung. Erst mit print("foo", "bar") wäre es ein tuple. Ich weiß, habe ich selbst mal falsch gemacht und nicht richtig gewusst.:angel:

    [/Klugscheiss]

    Also würde das Script so doch funktionieren? Sorry blick da nicht wirklich durch :/.

    Das ist mein bisheriger Ansatz der Modifizierung:

    Guck dir mal das an: Server/PI Steuerung via EMail

    Dass Script hab ich mir mal angeschaut. Ist mir jedoch fast schon zu komplex um da durchzublicken. Das meiste davon müsste ich ja rausnehmen da ich einzig die Subject-Zeile auslesen will. Inhalt des Mails ist mir egal muss also nicht ausgelesen und interpretiert werden daher auch kein Identifikationscode notwendig. Soll mich ja nur über das eingehen der Mail benachrichtigen.

    In deiner Beschreibung hast du noch geschrieben dass es nur ausgelöst wird wenn das Subject exakt mit der vorgegebenen Variabel übereinstimmt. Gibts da auch die Möglichkeit dass es nicht exakt sein muss? Also in meinem Fall z.B. *No-Ip* da ich noch nicht genau weiss wie der Betreff lauten wird.

    Ich suche nicht nach einer fertigen Lösung sondern nach dem Weg dahin ;)

    4 Mal editiert, zuletzt von Apop85 (16. Dezember 2017 um 16:58)

  • Also würde das Script so doch funktionieren? Sorry blick da nicht wirklich durch :/.

    Theoretisch ja, macht nur nicht das, was du denkst. Und das ist selten gut :no_sad:

    Gibts da auch die Möglichkeit dass es nicht exakt sein muss? Also in meinem Fall z.B. *No-Ip*

    Python
    >>> subject = "Ihr No-IP Account muss aktualisiert werden!"
    >>> "no-ip" in subject
    False
    >>> "no-ip" in subject.lower()
    True
    >>>
  • Theoretisch ja, macht nur nicht das, was du denkst. Und das ist selten gut :no_sad:

    Meinst du jetzt das originale oder das modifizierte (oder beide)? Beim Originalen ist es mir bewusst dass es nicht das macht was ich will. Beim modifizierten jedoch sehe ich grad nicht was es anders macht. Abgesehen dass das senden der Nachricht evt nicht richtig geschrieben ist(?)

    Ich suche nicht nach einer fertigen Lösung sondern nach dem Weg dahin ;)

    Einmal editiert, zuletzt von Apop85 (16. Dezember 2017 um 17:16)

  • Linus hat glaub ich nicht alles gelesen - das Script in Beitrag#8 & #10 wird in der Form nicht funktionieren... Zeile#39 wird ne Fehlermeldung werfen.

    Bevor du versuchst irgendwelche fremden Scripts umzuschreiben, und dadurch ggf sogar Fehler des Autors blind zu übernehmen:

    Solange du Python nicht ansatzweise verstehst, ist das ganze Unterfangen dem Untergang geweiht. Du verballerst mit deinen (seltsamen) Versuchen viel mehr Zeit als wenn du dich ein mal hinsetzt und verstehst wie Python funktioniert - und dann verstehst du zumindest ansatzweise auch was da im einzelnen passiert.

    1. Brauchst du überhaupt eine Verarbeitung von Argumenten/Parametern?

    2. Was ist wenn die Anmeldung zur Mailbox gar nicht erfolgreich war?

    3. Muss wirklich jedes mal erneut (CHECK_FREQ) eine Anmeldung zur Mailbox erfolgen?

  • hey meigrafd

    Dass Zeile 39 fehlerhaft ist dachte ich mir bereits, das hab ich auch damit gemeint dass das senden der Nachricht nicht richtig geschrieben ist.

    1. Brauchst du überhaupt eine Verarbeitung von Argumenten/Parametern?

    2. Was ist wenn die Anmeldung zur Mailbox gar nicht erfolgreich war?

    3. Muss wirklich jedes mal erneut (CHECK_FREQ) eine Anmeldung zur Mailbox erfolgen?

    1. Nein das hab ich ja bereits beantwortet. Ich brauche nur den Betreff sonst nichts.

    2. Stimmt da gibts keinen Ausgang aus der Schleife, daran hab ich noch nicht gedacht.

    3. Reicht eigentlich auch beim ersten Ausführen oder falls Anmeldung fehlerhaft war.

    Du verballerst mit deinen (seltsamen) Versuchen viel mehr Zeit als wenn du dich ein mal hinsetzt und verstehst wie Python funktioniert

    Mittels try&error lerne ich meistens am besten. Und bisher hab ich alles was ich wollte irgendwie hingekriegt. Sicherlich nicht optimal. Aber Zeit hab ich momentan zur genüge. Und dass ich durch "kurzes" einlesen in Python direkt fehler von anderen entdecke wag ich ja zu bezweifeln ;)

    Und mir hlift das auch nicht wirklich wenn man sagt Zeile 39 wird ein Fehler verursachen. Warum denn? Was für ein fehler (bzw hier warscheinlich nicht interpretierbar da kein befehl)? Nach was muss ich suchen damit ich auf die Lösung komme? Den einzigen Hinweis hatte ich von Tell der sagte dass in python curl nicht notwendig ist. Darum steht in Zeile 39 das was da steht. Und darum habe ich das Script auch noch nicht laufen lassen da mir klar war dass das so nicht gehen wird. Das ist jetzt ned böse gemeint aber ich will einfach darauf hinweisen dass ich halt wirklich 0 Erfahrung darin habe.

    Ich suche nicht nach einer fertigen Lösung sondern nach dem Weg dahin ;)

  • Mit 1. beziehe ich mich eigentlich auf parse_arguments und was damit zusammenhängt...

    Zeile#39 wirft einen Fehler da die Zeile nicht der Syntax von Python entspricht.... Zum einen fehlt die Einrückung - ganz wichtig für Python. Zum anderen brauchst du dich doch blos fragen was Python mit der URL anfangen soll? Du kannst doch nicht einfach irgend etwas in irgend einer anderen Syntax da hin klatschen und erwarten dass der Interpreter weiß was damit anzufangen ist.... In deine Shell kannst du doch auch nicht irgendwas von Python copy&pasten, bash kann damit dann auch nichts anfangen und wirft ne Fehlermeldung.

    curl (Konsolenbefehl) ist deshalb nicht nötig da Python entsprechende Module hat um mit Web-Content umzugehen.

    Es ist von dir eine anstrengende Art wenn du sowas macht - 2x irgendeine bash Zeile ins Python Script einfügen, obwohl dir eigentlich bewusst ist dass das nicht funktionieren wird, aber stumpf so tust als wüsstest dus wirklich nicht und fragst dann scheinheilich "würde das funktionieren?". Also ich denke mir jetzt "will der mich veräppeln?". Wenn du etwas nicht weißt oder zu wissen glaubst dass etwas so nicht geht, dann frage gezielt "wie geht das" oder "wie macht man sowas" - aber nicht so wie du es bisher hier gemacht hast, da klinken wir uns schneller aus als du gucken kannst!

    Als Basis verwendest du jetzt bitte erst mal das hier:

  • Such mal nach python urllib (Achtung, für 2 und 3 unterschiedlich!), damit kannst du ais Python heraus einen Request ans Telegram Web API senden. Oder mit dem 3rd party Modul requests.

    Danke. Werde mir das mal anschauen.

    Ganz Allgemein, bei mir läuft Python 2.7.13 Ist es empfehlenswert auf 3.0 upzudaten oder kann es da zu Problemen führen?

    Ich suche nicht nach einer fertigen Lösung sondern nach dem Weg dahin ;)

  • Ich versuche grad mir einen Dienst einzurichten welcher die eingehenden Mails nach einem bestimmten Betreff durchsucht und falls dieser Betreff vorhanden ist mir eine Telegramnachricht schickt.

    Muss es python sein?

    procmail - Versatile e-mail processor

    in ~/.procmailrc

    ^Subject.*(Foo)

    | $HOME/bin/my.script

    my.script enthält dann den passenden telegram-cli Aufruf oder whatever.

    Wenn du nichts zu sagen hast, sag einfach nichts.

  • Also das mit dem aufrufen bzw. Nachricht schicken in python hab ich mit dem urllib-Tip schon mal hingekriegt. Danke dafür.

    Anfangs einfach noch urllib2 importieren und zum senden dann:

    Python
    response = urllib2.urlopen('https://api.telegram.org/botBOTID/sendMessage?chat_id=CHATID&text=Nachricht Erhalten')

    Das mit procmail kenn ich noch nicht. Ich schaus mir gleich mal an. Danke für den Tipp. Du kennst nicht zufälligerweise ein gutes Tutorial dazu?

    Ich suche nicht nach einer fertigen Lösung sondern nach dem Weg dahin ;)

    Einmal editiert, zuletzt von Apop85 (16. Dezember 2017 um 20:04)

  • Procmail sieht schon mal sehr interessant aus. Aber es braucht ja ein Kommandozeilenbasierendes mailprogramm als Grundlage. Kannst du da eins empfehlen welches für dieses Projekt gut geeignet wäre und/oder Einsteigerfreundlich ist (Gut dokumentiertes Setup/Tutorial)? Gibts ja diverse wie Mutt, Alpine, Fetchmail, Sup oder Notmuch und wahrscheinlich noch viele mehr.

    EDIT: Sehe grad Claws ist in raspbian vorinstalliert und wohl auch kommandozeilenfähig.

    Ich suche nicht nach einer fertigen Lösung sondern nach dem Weg dahin ;)

    Einmal editiert, zuletzt von Apop85 (16. Dezember 2017 um 20:57)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!