Forum: PC Hard- und Software E-Mail automatisch abrufen und Link aufrufen. Irgendwelche Ideen ?


von David G. (Firma: 10.08.1985) (follow2000)


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.

von Harald K. (kirnbichler)


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.

: Bearbeitet durch User
von Re D. (Gast)


Lesenswert?

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

von C-hater (c-hater)


Lesenswert?

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...

von Wendels B. (wendelsberg)


Lesenswert?

Sicherheitstechnisch ist das allerdings DER Supergau.

von Re D. (Gast)


Lesenswert?

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.

von Harald K. (kirnbichler)


Lesenswert?

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?

von Εrnst B. (ernst)


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.

von Re D. (Gast)


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.

von Kolja L. (kolja82)


Lesenswert?

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?

von Harald K. (kirnbichler)


Lesenswert?

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)

von Rüdiger B. (rbruns)


Lesenswert?

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.

von Jens M. (schuchkleisser)


Lesenswert?

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...

von Εrnst B. (ernst)


Lesenswert?

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…

von Kolja L. (kolja82)


Lesenswert?

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 😬

von David G. (Firma: 10.08.1985) (follow2000)


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.

von Kolja L. (kolja82)


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)

von Daniel A. (daniel-a)


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.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Daniel A. schrieb:
> Ich glaube, macht das GMX nicht mittlerweile genauso?

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

von C-hater (c-hater)


Lesenswert?

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.

von Re D. (Gast)


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.

von Harald K. (kirnbichler)


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.

von Rene K. (xdraconix)


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?!

von David G. (Firma: 10.08.1985) (follow2000)


Lesenswert?

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.

von Harald K. (kirnbichler)


Lesenswert?

David G. schrieb:
> Aber das scheint wellenmäßig zu passieren, nicht wellenmäßig.

Ach so. Na dann.

von David G. (Firma: 10.08.1985) (follow2000)


Lesenswert?

:-) Sorry, meine nicht immer.

von Ein T. (ein_typ)


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.

von Ein T. (ein_typ)


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.

von David G. (Firma: 10.08.1985) (follow2000)


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.

von Harald K. (kirnbichler)


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/

von Daniel A. (daniel-a)


Lesenswert?


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
Noch kein Account? Hier anmelden.