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.
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.
:
Bearbeitet durch User
Das dürfte mit Python in ein paar Zeilen erledigt sein.
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... Der TO kann wohl garnix. Also wird er auch zu keiner Lösung kommen...
Sicherheitstechnisch ist das allerdings DER Supergau.
C-hater schrieb: > Oder auch in jeder anderen Sprache. So man sie denn beherrscht... Na dann mach es mal in C für den NAS.
Re D. schrieb: > Na dann mach es mal in C für den NAS. Auf dem NAS soll Docker laufen. Welche spezifische Hemmschwelle siehst Du da jetzt?
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.
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.
David G. schrieb: > An diese Mailadresse kommt eine E-Mail an wo ein Link enthalten ist den > ich gerne automatisiert aufgerufen haben möchte. Niemand stellt die offensichtlichste Frage, soll der Link nur aufgerufen, oder das Ziel (Webseite, Daten, ..) auch gespeichert werden?
Kolja L. schrieb: > Niemand stellt die offensichtlichste Frage Was könnte ich mit dieser Formulierung hier gemeint haben? Harald K. schrieb: > c) etwas, was den Link "aufruft" (was auch immer exakt Du damit meinen > magst)
Harald K. schrieb: > 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. Den Inhalt des Links mit wget holen und speichern/auswerten.
Kolja L. schrieb: > Niemand stellt die offensichtlichste Frage, soll der Link nur > aufgerufen, oder das Ziel (Webseite, Daten, ..) auch gespeichert werden? Wetten, das es sich um ein "Bitte bestätigen sie das sie höchstselbst $Service auf einem neuen Gerät nutzen, in dem sie diesen Link anklicken!" handelt? Blöd nur wenn dann da ein CAPTCHA kommt...
Jens M. schrieb: > Wetten, das es sich um ein "Bitte bestätigen sie das sie höchstselbst > $Service auf einem neuen Gerät nutzen, in dem sie diesen Link > anklicken!" handelt? Hmm. Ich wette dass es irgendeine Art von Smarthome-Fernsteuerung "Ohne VPN!!11elf" werden soll… Email mit http://192.168.176.222/?switch=on an die Funksteckdose…
Harald K. schrieb: > Was könnte ich mit dieser Formulierung hier gemeint haben? > Harald K. schrieb: >> c) etwas, was den Link "aufruft" (was auch immer exakt Du damit meinen >> magst) Ups, da war ich wohl etwas voreilig 😬
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.
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) |
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.
:
Bearbeitet durch User
Daniel A. schrieb: > Ich glaube, macht das GMX nicht mittlerweile genauso? GMX kennt nach wie vor pop3, und das funktioniert ohne Spezialitäten.
Daniel A. schrieb: > 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? Nein.
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.
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.
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?!
Wenn man mit seinem Laptop sich in einem Anderen wlan Netz an einem anderen Ort einbucht kommt diese Meldung. Aber das scheint wellenmäßig zu passieren, nicht wellenmäßig. Ein großes Problem ist es nicht. Das gehört in dem Bereich Luxusprobleme.
:-) Sorry, meine nicht immer.
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.
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.
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.
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/
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.