Auslesen der Email-Adresse des Absenders

  • Hallo zusammen.


    Ich arbeite grad an einem kleinen Script welches die einkommenden Mails auf einen gewissen Absender überprüfen sollen und falls dieser mit der Vorgabe übereinstimmt an einen Facebook-Gruppenchat eine Nachricht schickt. Leider kriege ich das grad nicht hin dass der Absender richtig ausgelesen wird. Ich wäre daher froh wenn mir da einen kleinen Tipp geben könnte ;). Der rest funktioniert soweit. Die Mails werden ausgelesen und die Nachricht an den Chat kann verschickt werden. Ich vermute dass From(Zeile 61) hier nicht die richtige Wahl ist um die Adresse des Absenders zu prüfen.



    Edit: Wenn ich den Codeblock auf Python einstelle werden alle Kommentare und der Shebang ausgeblendet... Ich denke das sollte nicht so sein? oO


    Edit2: Fehler war wohl das From als Google <no-reply@accounts.google.com> definiert wird. Muss noch schauen dass ich nur die Mailadresse rauskrieg ohne den Namen davor.



    Grüsse Apop

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

    4 Mal editiert, zuletzt von Apop85 ()

  • USERNAME = str("mein fbusername bzw mail")
    PASSWORD = str("meinfbpasswort")
    MESSAGE = str("Diese Nachricht wurde von einem Script verschickt")
    GROUP_ID = str("<Facebook-Gruppen-ID>")

    Wasndas? :conf:

    Du rufst str() mit nem str als Argument auf? Warum?


    Ansonsten: Suchmaschinen beißen nicht, meine jedenfalls. Schau mal hier: https://stackoverflow.com/a/17899473/5952681, ich denke du findest den Fehler selbst. Im Mailprogramm sichtbarer und tatsächlicher Absender sind zwei unterschiedliche paar Schuhe.


    Edit: ich seh grad, das hast du per Edit ja auch genannt. Dann prüfe doch auf str.endswith(f“<{FROM}>“) ;)

  • Edit2: Fehler war wohl das From als Google <no-reply@accounts.google.com> definiert wird. Muss noch schauen dass ich nur die Mailadresse rauskrieg ohne den Namen davor.

    Hallo Apop,

    vorneweg, mit den Funktionen und Möglichkeiten deines verwendeten Moduls habe ich mich nicht auseinandergesetzt. Dennoch möchte ich dir eine einfache Möglichkeit zeigen wie du im zitierten Teil an die eMailadresse kommt:

    Python
    1. string = "Google <no-reply@accounts.google.com>"
    2. mailanfang = string.find("<") + 1
    3. mailende = string.find(">")
    4. print(string[mailanfang:mailende])
  • Danke Hofei & Linus :)


    Hab in der Zwischenzeit auch eine Lösung gefunden die wie folgt ist:


    Code
    1. Fromchk = mail['From']
    2. Fromchk = Fromchk[Fromchk.find("<")+len("<"):Fromchk.rfind(">")]

    Bzw der komplette Quelltext

    Ich markier den Thread als gelöst.


    Du rufst str() mit nem str als Argument auf? Warum?

    *hust* Weil blutiger Anfänger mit py ^^ Ich hab mal an nem PW-Generator rumgebastelt und da hatt ich damit die besten Resultate ^^


    Grüsse Apop

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

  • > Weil das das AFAIK gültige no-reply@accounts.google.com <foo@bar.baz> als false positive erkennt.

    Im Prinzip ja. Nur habe ich noch nie ein Fake-Mail von "no-reply@accounts.google.com bekommen :-)


    Und wenn man FROM als "<no-reply@accounts.google.com>" definiert, braucht es schon viel Phantasie um das noch zu umgehen.

    (Ja, ich weiss, das ist immer noch moeglich. Wahrscheinlich kann man aber auch die andere Loesung mit Quotes etc. noch ueberlisten)

  • Die Google-Adresse war auch nur ein Test da ich grad ein Mail davon auf "Lager" hatte. Das mit dem Falsch-Positiv behalte ich mal im Auge obwohl das bei meiner Anwendung des Scripts kaum eine Rolle spielen wird. Da muss es jemandem schon sehr sehr Langweilig sein um da rumzutrollen ^^.

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

  • Hallo,


    #!/usr/bin/python2 ist eine etwas ... ungewöhliche She-Bang. Für Python 2 wäre es normalerweise #!/usr/bin/python


    Gibt es einen speziellen Grund, warum du Python 2 statt Python 3 verwendest? Der Support endet 2020. Und es gibt heute noch kaum Gründe, Python2 zu verwenden.


    Gruß, noisefloor

  • Und es gibt heute noch kaum Gründe, Python2 zu verwenden.

    von den vielen Modulen die nie Python3 umgestellt wurden mal abgesehen. Und nein, ich such jetzt keins raus. Das ist zwar nicht die Schuld von Python aber einer der Hauptgründe warum ich am Ende immer wieder bei python2 lande - weil ich zu Faul bin die zu konvertieren (und ich mich nicht an print() gewöhnen kann :lol:) . Und das Python2 nach 2020 aufhört zu existieren glaubst du doch auch nicht. Die nächsten 10-15 Jahre wirst du noch damit leben müssen.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • von den vielen Modulen die nie Python3 umgestellt wurden mal abgesehen.

    Welche, von dem Adafruit-Kram, der IMHO sehr bedenklich gepflegt wird, mal abgesehen?

    weil ich zu Faul bin die zu konvertieren

    Ja, Entwickler sind faul. Ja, ich auch. Aber manchmal kann man sich dann noch die 15 Sekunden nehmen, die es braucht, 2to3 mit den passenden Parametern aufzurufen... :fies:

    Und das Python2 nach 2020 aufhört zu existieren glaubst du doch auch nicht. Die nächsten 10-15 Jahre wirst du noch damit leben müssen.

    Klar, der dazugehörige Code wird nicht verschwinden und lässt sich wahrscheinlich auch mittelfristig noch gut kompilieren. ABER: betrachte mal PHP 5 als Beispiel. Wie viele Leute wollen das aufgrund alter Anleitungen immer noch installieren und scheitern? Naaa... ?


    Ich gehe davon aus, dass Python 2 mit dem ersten nächsten großen Raspbian-Release nach dem 01.01.2020 sowohl aus den Paketquellen als auch aus der Standardinstallation fliegen wird. AFAIK haben alle bedeutenden/aktiven Distros bestehende Tools auf Python 3 aktualisiert.


    Einfach mal loslassen, Python 4.0 wird auch nicht mehr ewig auf sich warten lassen.

  • Hallo,


    Zitat


    von den vielen Modulen die nie Python3 umgestellt wurden mal abgesehen.

    Das sind dann die Projekte, die heute tot sind. Und nein, ich suche dir keine Beispiele raus, um deine gewagt bis falsche Behauptung zu widerlegen ;-)


    Das du ewig-gestigt bist steht ja inder Signatur - deine Sache. Aber deswegen musst du andere ja nicht dazu annimieren.

    Mal abgesehen davon, dass neuere Versionen von Python ja auch Vorteile gegenüber 2.7 haben wie f-Strings, Verbesserung der dict-Implementierung unter der Haube, asyncio, konsistentere Aufteilung der Module etc.


    Gruß, noisefloor

  • Ich nutze seit Jahren folgendes (Auszug aus einem Programm):


    Code
    1. import imaplib
    2. import email
    3. USERNAME = 'benutzername'
    4. PASSWORD = 'passwort'
    5. connection = imaplib.IMAP4_SSL('imap.gmail.com', 993)
    6. connection.login(USERNAME, PASSWORD)
    7. connection.select("INBOX")
    8. typ, data = connection.SEARCH(None, '(OR (FROM "vorname.nachname@domain.com") (FROM "firma@wasauchimmer.com"))')


    Ist noch Python2. Hier werden zB zwei Adressen gesucht. Kann analog beliebig erweitert werden.

    ggf. ist das, was du suchst. Die Doku hilft auch weiter.


    PS:

    Script gibt es im Deutschen nicht ;) Skript oder besser Programm

  • Der Thread ist doch erst 15h alt. Warum sollte man da nen neuen aufmachen? Ich hab einfach mal die "erledigt" Markierung entfernt - für dein Sehlenheil ;)

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Gibt es einen speziellen Grund, warum du Python 2 statt Python 3 verwendest? Der Support endet 2020. Und es gibt heute noch kaum Gründe, Python2 zu verwenden.

    Das Script/Skript ist eine abgeänderte Version von einem Script/Skript welches mir Meigrafd mal für das Auslesen eines Verifizierungslinks von no-ip geschrieben hat. Ich kenne mich leider mit Python so gar nicht aus und ausser print() mit printf() zu ersetzen wüsste ich nicht wo ich anfangen soll um es auf Python 3 umzuschreiben. Einen speziellen Grund warum ich python2 in der Shebang verwende gibt es eigentlich nicht. Ich habe bemerkt dass das so funktioniert und dachte mir dass es so spezifischer definiert ist (halt wie absolute und relative Pfade). Und wie oben bemerkt wird irgendwann auf Py3 umgestellt, was wohl auch bedeutet (so nehme ich an) dass der Shebang python dann als Py3 interpretiert wird.


    Script gibt es im Deutschen nicht ;) Skript oder besser Programm

    Naja das ist jetzt (für mich) ein Detail. Und mir wurde eingetrichtert dass Script/Skript != Programm ist ^^ daher verwende ich diesen Ausdruck ^^ 



    Noch zur Vollständigkeit nochmals der Quellcode den ich um das Auslesen eines Links erweitert habe (mit einer mmn sehr sehr dreckigen Methode ^^ (Zeile: 72-94) )


    Die dreckige Methode dadurch, dass das ein href3D-Link ist der im Quellcode des Mails etwas komisch formatiert war also irgendwie www=2homepage=2com usw. daher habe ich nur die ID der notification ausgelesen und die dann einem vordefinierten Pfad angefügt. So sollte auch verhindert werden dass da Links zu Maleware (bei Falsch-Positiven Mails) o.ä. reinrutschen können da nur die ID und nicht der komplette Link ausgelesen wird.

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

    3 Mal editiert, zuletzt von Apop85 ()

  • Eben nicht. Du musst (unter anderem) print durch print() ersetzten, nix printf() :-/

    Statement vs Funktion. Lässt sich auch meist vollständig automatisieren (2to3), nu das wollen offenbar viele nicht verstehen.


    Tipp: lies dich mal ein bisschen zu Python (3 im speziellen) ein, sonst wirst du auf Dauer nicht wirklich effizient damit programmieren können.