Anfänger-Script -Gmail runterladen, Header entfernen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
cs_reaper
User
Beiträge: 7
Registriert: Samstag 8. Januar 2022, 22:39

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
Benutzeravatar
sparrow
User
Beiträge: 4186
Registriert: Freitag 17. April 2009, 10:28

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.
cs_reaper
User
Beiträge: 7
Registriert: Samstag 8. Januar 2022, 22:39

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
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die ist doch beschrieben in deinem Blog Post. Die entfernt die html Tags.
Benutzeravatar
__blackjack__
User
Beiträge: 13071
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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. 🤔
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten