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
Anfänger-Script -Gmail runterladen, Header entfernen
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.
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.
Ich habe mich nun etwas vorgearbeitet:
Quelle: https://medium.com/@yernagulahemanth/do ... e9bc62e501
Zeile mit text = de_html_me(html_) verstehe ich aber nicht
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
- __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