E-Mail automatisch abrufen und Link aufrufen. Irgendwelche Ideen ?

OP (Firma: 10.08.1985) #7470006
Lesenswert?

Hallo Zusammen,

ich suche eine Lösungansatz für folgende Problemstellung. Ich habe einen kostenlosen MailAccount bei GMX gemacht. An diese Mailadresse kommt eine E-Mail an wo ein Link enthalten ist den ich gerne automatisiert aufgerufen haben möchte.

Hat jemand eine Idee oder Ansatz wie man sowas bewerkstelligen kann? Ich habe eine Synology NAS zuhause auf der man Docker laufen lassen kann.

#7470022
Lesenswert?

Du brauchst zwei (oder drei) Dinge:

a) etwas, was die Mail abholt. Script mit Pop3-Fetch.

https://gist.github.com/xionluhnis/4712075

Wird an das GMX-Postfach auch noch was anderes gesendet, was Dir von Bedeutung ist?

b) etwas, was die empfangene Mail auswertet und den Link extrahiert

In den üblichen Scripumgebungen ist grep dafür beliebt

c) etwas, was den Link "aufruft" (was auch immer exakt Du damit meinen magst)

Das könnte curl sein, das könnte aber (je nachdem, was das "aufrufen" nun genau bedeutet) aber auch ein irgendwie zu steuernder Webbrowser sein.

Oh, und d) etwas, was Dein Script zyklisch aufruft.

cron ist dafür beliebt.

#7470177
Lesenswert?

curl kann POP3 oder IMAP, und anschließend auch HTTP(s) zum Aufrufen des gefundenen Links.

https://everything.curl.dev/usingcurl/reademail

dazwischen fehlt nur etwas Magie, grep&co.

Wer's in C mag: curl lässt sich problemlos in C-Programme einbinden, libcurl.

Der fieseste Teil an dem Ganzen ist das Dekodieren von Mime Multipart, quoted-printable & Base64, ...

Aber selbst das geht in bash:

https://gist.github.com/markusfisch/2649043

wenn man kein perl, python, nodejs etc. installieren mag.

Gast #7470187
Lesenswert?

Harald K. schrieb:

Auf dem NAS soll Docker laufen. Welche spezifische Hemmschwelle siehst Du da jetzt?

Ja, kann man machen. Man könnte auch in einer VM ein Linux installieren auf den in einer VM ein Windows läuft auf dem ein AVR Emulator läuft, auf dem man die Aufgabe in hoch effizienten ASM löst.

OP (Firma: 10.08.1985) #7470269
Lesenswert?

Es geht sich darum das ich immer wenn ich unterwegs bin und Netflix woanders schauen möchte ich mein Handy brauche um einen Link anzufordern damit Netflix auf dem jeweiligen Gerät läuft.

Der Ansatz mit Python und nodejs ist eine gute Idee. Kann ich beides auf dem NAS laufen lassen. Ich werde mir das genauer ansehen.

#7470381
Lesenswert?

1
import imaplib
2
import email
3
import re
4
import webbrowser
5

6
def search_mailbox(server, username, password, subject_keyword):
7
    mailbox = imaplib.IMAP4_SSL(server)
8
    mailbox.login(username, password)
9
    mailbox.select()
10

11
    # Search for emails with the specified subject keyword
12
    search_criteria = f'(SUBJECT "{subject_keyword}")'
13
    status, messages = mailbox.search(None, search_criteria)
14
    mail_ids = messages[0].split()
15

16
    for mail_id in mail_ids:
17
        # Fetch the email content
18
        status, message_data = mailbox.fetch(mail_id, '(RFC822)')
19
        raw_email = message_data[0][1]
20
        email_message = email.message_from_bytes(raw_email)
21

22
        # Process the email
23
        subject = email_message['Subject']
24
        print(f"Subject: {subject}")
25

26
        if 'Netflix' in subject:
27
            # Check if email has a plaintext body
28
            if email_message.is_multipart():
29
                for part in email_message.walk():
30
                    content_type = part.get_content_type()
31
                    content_disposition = str(part.get("Content-Disposition"))
32

33
                    if "attachment" not in content_disposition:
34
                        body = part.get_payload(decode=True).decode()
35
                        # Extract URLs from the body using regular expression
36
                        urls = re.findall(r'https?://\S+', body)
37
                        if urls:
38
                            print("Found URLs:")
39
                            for url in urls:
40
                                print(url)
41
                                webbrowser.open(url)
42
                        else:
43
                            print("No URLs found in the email body.")
44
            else:
45
                body = email_message.get_payload(decode=True).decode()
46
                # Extract URLs from the body using regular expression
47
                urls = re.findall(r'https?://\S+', body)
48
                if urls:
49
                    print("Found URLs:")
50
                    for url in urls:
51
                        print(url)
52
                        webbrowser.open(url)
53
                else:
54
                    print("No URLs found in the email body.")
55

56
    mailbox.logout()
57

58
if __name__ == "__main__":
59
    # Replace these with your SMTP account details
60
    server = 'imap.example.com'
61
    username = 'your_username'
62
    password = 'your_password'
63
    subject_keyword = 'Netflix'
64

65
    search_mailbox(server, username, password, subject_keyword)
#7470593
Lesenswert?

Bei GMail braucht man ja mittlerweile oauth für das Login per smtp/imap, das man vorher auch noch in der Weboberfläche aktivieren muss, und rein nur user/PW auth geht nur wenn man 2FA aktiviert.

Ich glaube, macht das GMX nicht mittlerweile genauso?

Das fiese an oauth2 ist nämlich, um überhaupt ein Login machen zu dürfen, verlangen die Provider neben dem Username und Passwort auch ein shared secret. Der Provider muss dem App Entwickler das geben, damit die Anwendung beim Provider die anmelden überhaupt durchführen kann/darf. Ihr kennt sicher das Fenster, "erlaube <Appname> zugriff auf bla bla", das ist woher die <Appname> überhaupt erst "kennen".

Ist natürlich sicherheitstechnisch völlig sinnlos, weil Mail Programme eigentlich immer lokal laufen, und man daher von denen deren Secret einfach stehlen kann. Aber es eignet sich gut, konkurrierenden Mail Programmen das Leben schwer zu machen, weil die dann von jedem Mail Provider mit oauth, einzeln ihre App registrieren müssen, sofern das überhaupt möglich ist. Ich habe auch schon Mail Programme gesehen, die das dem User überlassen, aber so was ist dann doch niemandem zumutbar.

Gast #7470656
Lesenswert?

Harald K. schrieb:

GMX kennt nach wie vor pop3, und das funktioniert ohne Spezialitäten.

Pop3 ist sowas von letztes Jahrhundert. Ne eigene Domain mit Mail-Adresse samt Hosting und DynDns kostet weniger als 2€ im Monat. Wer sich mit Drittanbietern da rumschlägt hat es eigentlich nicht anders verdient.

#7470882
Lesenswert?

Re D. schrieb:

Pop3 ist sowas von letztes Jahrhundert.

Kann ja sein, aber für die vorliegende Aufgabe ist es die simpelste Lösung.

Für Email würde ich sowas auch nicht nutzen wollen, ich betreibe seit ca. 15 Jahren meinen eigenen selbstgehosteten Mailserver (an eigener Domain) und muss mich nicht mit irgendwelchen Vorgaben von "Freemailern" herumschlagen.

Aber das ist ein komplett anderer Use-Case.

#7470889
Lesenswert?

David G. schrieb:

Es geht sich darum das ich immer wenn ich unterwegs bin und Netflix woanders schauen möchte ich mein Handy brauche um einen Link anzufordern damit Netflix auf dem jeweiligen Gerät läuft.

Jetzt mal ernsthaft, ich bin ja nun auch jeden zweiten Tag in einem anderen Hotel. Wenn ich auf meinem Laptop oder meinem Handy (gut, das kommt seeehr selten vor - weil einfach unbrauchbar) Netflix schaue, dann brauche ich da weder nen Link zu klicken oder irgendwas zu bestätigen. In den Hotels sind meist (also in 90% der Fälle, sei es nun ne billige Kaschemme oder ein hochpreisiges ala Best-Western) kann man auf deren TVs dank Hotelmode garkein Netflix schauen oder die Geräte sind einfach keine Smart-TVs oder eben direkt Hotel-TVs.

Also warum musst du so oft deine EMail bei Netflix bestätigen das du dies automatisieren musst?! Ist das zu viel einmal die Woche ne Bestätigung zu klicken das du dir solch ein Einfallstor für Maleware baust?!

#7471702
Lesenswert?

C-hater schrieb:

Re D. schrieb:

Das dürfte mit Python in ein paar Zeilen erledigt sein.

Oder auch in jeder anderen Sprache. So man sie denn beherrscht...

Ja, womöglich, aber Python hat halt insbesondere für diesen Fall besondere Vorzüge -- wenn man es denn beherrscht, nicht wahr. Der wesentliche Vorzug dabei ist vermutlich, daß Python schon ALLE für den Anwendungsfall nötigen Bibliotheken standardmäßig mitbringt: IMAP4- und POP3-Clients mit und ohne TLS, E-Mail- und HTML-Parser, Regular Expressions... eine so umfangreiche Ausstattung mit stabilen, getesteten, gut dokumentierten und performanten Bibliotheken bringt nunmal nicht jede Sprache mit, und -- nicht nur, aber auch -- deswegen ist Python für diese Aufgabe besonders gut geeignet. Das ist schon ziemlich cool, weißt Du... wenn man es denn beherrscht.

#7471712
Lesenswert?

Kolja L. schrieb:

1
> # ... code 
2
>

Wer eine Domain und einen klassisch eingerichteten UNIXoiden Mailserver dafür übrig hat, kann sich das Polling, OAuth etc. auch einfach ersparen und ein ähnliches Pythonskript schreiben, das die E-Mails von sys.stdin liest und einfach über einen Eintrag wie

1
| /path/to/script.py

in /etc/aliases aufgerufen und vom eintreffen einer Mail getriggert wird. Danach braucht es bei Google nurmehr einer Weiterleitung, fertig. Wenn die Voraussetzungen gegeben sind, ist das eine sehr elegante Lösung.

OP (Firma: 10.08.1985) #7473761
Lesenswert?

Ich habe zusammen mit Chatgpt die Aufgabe lösen können. Das funktioniert soweit ganz gut. Der imap Server wird im 10 Sekunden Raster abgepollt. Sobald die Mail kommt wird die richtige an Hand des Betreffs gefunden und der richtige Link in der Mail gefunden. Er öffnet das Browserfenster und jetzt kommt das Problem auf der Seite musss der eingebetet Knopf Netflix Haushalt aktualisieren gedrückt werden. Hat das jemand einen Ansatz wie ich diesen betätigen kann? der ist eingebette in der Website. Auch über die Untersuchen Funktion des Browsers konnte ich keine Möglichkeit finden diesen über einen einfachen Ausdruck aufzurufen.

#7473816
Lesenswert?

David G. schrieb:

und jetzt kommt das Problem auf der Seite musss der eingebetet Knopf Netflix Haushalt aktualisieren gedrückt werden. Hat das jemand einen Ansatz wie ich diesen betätigen kann?

Ich denke, Du hast die Aufgabe mit ChatGPT lösen können, wieso fragst Du jetzt noch?

Wenn Du Windows verwendest, kannst Du das mit autoit erledigen. Das drückt für Dich in einem Fenster auf Dinge.

https://www.autoitscript.com/site/autoit/

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren