Seite 1 von 1

Anfänger-Script -Gmail runterladen, Header entfernen

Verfasst: Samstag 8. Januar 2022, 22:49
von cs_reaper
Hallo liebe Leute,

ich bin leider ein blutiger Anfänger.
Ich brauche ein Script,

- welches sich bei meinen Gmail-Account einloggt
- Mails von einen speziellen Absender findet.
- Diese Mail als bestenfalls als Text + Anhang speichert
- An einen Telegram-Bot übergibt (Ein funktionierenden Bot den ich über Python ansteuern kann habe ich schon)

Ziel ist eine Weiterleitung der Mail, später an eine andere Adresse oder an den Bot (ohne den Header des eigentlichen Absenders)
- wenn ihr hier andere Ideen habt, ist dies auch gut.

ICh weiß leider garnicht wo ich anfangen soll.

was ich gefunden habe:

https://qastack.com.de/programming/3486 ... from-gmail

Re: Anfänger-Script -Gmail runterladen, Header entfernen

Verfasst: Samstag 8. Januar 2022, 23:21
von sparrow
Das Script in deinem Link scheint veraltetl, weil es den Print-Befehl aus Python 2 verwendet.

Grundsätzlich greift man aber mit der dort gezeigten imaplib auf entsprechende Postfächer zu.

Anonsten gilt beim Programmieren immer: Das große Problem in viele kleine Probleme aufteilen und die dann Problem für Problem lösen.

Re: Anfänger-Script -Gmail runterladen, Header entfernen

Verfasst: Samstag 8. Januar 2022, 23:39
von cs_reaper
Ich habe mich nun etwas vorgearbeitet:

Quelle: https://medium.com/@yernagulahemanth/do ... e9bc62e501

Code: Alles auswählen

import imaplib,email,getpass
import os,sys
from bs4 import BeautifulSoup
import warnings
warnings.filterwarnings("ignore")

imap_url = "imap.gmail.com"
con = imaplib.IMAP4_SSL(imap_url)
con.login('xxxxxx@googlemail.com','xxxxxxx')

con.select('"INBOX"')
result, data = con.uid('search',None,'ALL')
mails = data[0].split()

count = len(mails)
file_num = 0
for j,i in enumerate(mails):
    to_ = []
    from_ = []
    subj = []
    body = []
    ctype = []
    sys.stdout.write('fetching {}/{} mail'.format(j,count))
    e_result, e_data = con.uid('fetch',i,'(RFC822)')
    sys.stdout.write('\r')
    sys.stdout.write('decoding')
    raw_email = e_data[0][1].decode("utf-8")
    sys.stdout.write('\r')
    email_msg = email.message_from_string(raw_email)

    to_.append(email_msg['To'])
    from_.append(email_msg['From'])
    subj.append(email_msg['Subject'])
    for i in email_msg.walk():
                content = []
                if i.get_content_maintype() == 'multipart':
                    continue
                file_name = i.get_filename()

                if not file_name:
                    ext = '.html'
                count -= 1
                content_type = i.get_content_type()

                if "plain" in content_type:
                    content.append(i.get_payload())
                elif "html" in content_type:
                    html_ = i.get_payload()
                    text = de_html_me(html_)
                    content.append(text)
                else:
                    content.append('nan')

    body.append(content)
    ctype.append(content_type)
    with open('emails__/'+str(file_num)+'.txt','w') as f:
        f.writelines('To: '+str(' '.join(to_))[:]+'\n')
        f.writelines('From: '+str(' '.join(from_))[:]+'\n')
        f.writelines('Subject: '+str(' '.join(subj))[:]+'\n')
        f.writelines(str(' '.join(ctype))[:]+'\n')
        f.writelines('CType: '+str(' '.join(ctype))[:]+'\n')
    file_num += 1
    if count == 10:
        break



Zeile mit text = de_html_me(html_) verstehe ich aber nicht

Re: Anfänger-Script -Gmail runterladen, Header entfernen

Verfasst: Samstag 8. Januar 2022, 23:54
von __deets__
Die ist doch beschrieben in deinem Blog Post. Die entfernt die html Tags.

Re: Anfänger-Script -Gmail runterladen, Header entfernen

Verfasst: Sonntag 9. Januar 2022, 02:53
von __blackjack__
Das Skript ist komisch bis schlecht. Möchte wissen was sich der Autor gedacht hat lauter einelementige Listen anzulegen, die dann mit ``" ".join(…)`` zu einer Zeichenkette zusammen zu setzen, und davon dann mit ``[:]`` eine Kopie zu erstellen. Das macht überhaupt gar keinen Sinn. 🤔