mit Python Email Anhänge speichern?
Hallo zusammen,
ich möchte in python Email Anhänge mit IMAP speichern... Ich kann jedoch keine Anhänge mit dem Betreff "MAÜ" speichern... Wenn ich jedoch nach "MAU" suche, klappt es. Kann mir jemand bei meinem Problem helfen??
# E-Mails mit dem gesuchten Betreff suchen
typ, data = imap.search(None, 'SUBJECT "MAÜ-Einsatzabschluss"')
for num in data[0].split():
typ, data = imap.fetch(num, '(RFC822)')
raw_email = data[0][1]
email_message = email.message_from_bytes(raw_email)
# Alle Anhänge in der E-Mail speichern
for part in email_message.walk():
if part.get_content_maintype() == 'multipart':
continue
if part.get('Content-Disposition') is None:
continue
filename = part.get_filename()
if filename is not None:
filepath = os.path.join(save_folder, filename)
with open(filepath, 'wb') as f:
f.write(part.get_payload(decode=True))
print(f'Speichere Anhang "{filename}" in "{save_folder}"')
2 Antworten
Hallo!
Es könnte sein, dass das Problem mit der Verwendung von Umlauten im Suchstring zusammenhängt. Möglicherweise wird der Umlaut "Ü" in der E-Mail nicht im gleichen Format wie im Suchstring gespeichert oder codiert.
Ein möglicher Workaround besteht darin, den Suchstring zu ändern, um mögliche Umlautprobleme zu vermeiden. Sie können beispielsweise den Suchstring in eine reguläre Ausdrucksnotation umwandeln, die auch nicht-ASCII-Zeichen unterstützt. Hier ist ein Beispiel:
import re
search_str = 'MAÜ-Einsatzabschluss'
search_str_encoded = search_str.encode('utf-8')
regex = re.compile(br'SUBJECT "' + re.escape(search_str_encoded) + br'"', re.IGNORECASE)
typ, data = imap.search(None, 'X-GM-RAW', regex)
In diesem Beispiel wird der Suchstring zunächst in UTF-8-kodierte Bytes konvertiert und dann in eine reguläre Ausdrucksnotation umgewandelt, die die bytes-Strings unterstützt. Das
re.escape()
-Funktion wird verwendet, um sicherzustellen, dass Sonderzeichen im Suchstring korrekt codiert werden.Wenn Sie dies versuchen und das Problem weiterhin besteht, können Sie den Inhalt der E-Mail-Header und des Betreffs ausdrucken, um zu sehen, ob der Betreff tatsächlich im richtigen Format gespeichert ist. Das Problem könnte möglicherweise auch im E-Mail-Header oder in der IMAP-Implementierung liegen.
Ich hoffe, das hilft Ihnen weiter!
Es ist 22:45 Uhr und ich bin am Handy. Da ich gerade nicht meinen PC zur Hand habe (er baut mir gerade mein eigenes ChatGPT aus), kann es ja mal sein so, dass das stimmt. Trotzdem habe ich jahrelange Python und Programmiererfahrung und ich habe die Antwort geprüft - sie ist richtig und ich hätte nichts anderes geschrieben. Ich hätte ChatGPT auch sagen können, dass er meinen eintrainierten Schreibstil benutzt, aber dafür war ich zu faul
Ich habe kein Problem damit ChatGPT zu nutzen und nutze es selbst. Mir war es nur aufgefallen
Das klingt nach einem Codierungs Problem. Welche Bibliothek verwendest du für imap.search?
Schau mal ob dir diese Lösung zu einem ähnlichen Problem etwas bringt:
Ansonsten wurde hier ein ähnliches Problem diskutiert und ein Workaround gefunden:
Benutze diese hier:
import imaplib
import email
import os
Die Antwort klingt sehr nach ChatGPT, habe ich recht?
Zumindest eine gute ausführliche Antwort