import imaplib import email import os from email.header import decode_header # ===== Einstellungen ===== IMAP_SERVER = "aps-exch01.aps.local" # IMAP-Server-Adresse IMAP_PORT = 993 # IMAP-SSL-Port USERNAME = "i.meszely@aps-hh.de" # Benutzername / E-Mail-Adresse PASSWORD = "virgI6774#Maci" # Passwort # MAILBOX = 'HelpDesk/Inbox' # Der zu verwendende Ordner MAILBOX = "INBOX" # Ordnername (z. B. "INBOX" oder "HelpDesk") PROCESSED_FOLDER = "erledigt" # Zielordner für verarbeitete E-Mails DOWNLOAD_DIR = r"\\aps-nb090\Test" # Speicherort für PDFs # Verbindung herstellen mail = imaplib.IMAP4_SSL(IMAP_SERVER, IMAP_PORT) mail.login(USERNAME, PASSWORD) # Ordner auswählen mail.select(MAILBOX) # Alle Nachrichten suchen (hier: alle E-Mails) status, messages = mail.search(None, "ALL") if status != "OK": print("Fehler beim Abrufen der Nachrichtenliste") mail.logout() exit() # Liste für zu löschende Nachrichten delete_list = [] # Nachrichten verarbeiten for num in messages[0].split(): try: # Nachricht abrufen status, data = mail.fetch(num, "(RFC822)") if status != "OK": print(f"Fehler beim Herunterladen der Nachricht {num}") continue msg = email.message_from_bytes(data[0][1]) pdf_found = False # Betreff dekodieren subject, encoding = decode_header(msg["Subject"])[0] if isinstance(subject, bytes): subject = subject.decode(encoding if encoding else "utf-8", errors="replace") print(f"Verarbeite E-Mail: {subject}") # Anhänge prüfen for part in msg.walk(): if part.get_content_maintype() == "multipart": continue if part.get("Content-Disposition") is None: continue filename = part.get_filename() if filename: decoded_name, enc = decode_header(filename)[0] if isinstance(decoded_name, bytes): decoded_name = decoded_name.decode(enc if enc else "utf-8", errors="replace") # Ungültige Zeichen im Dateinamen ersetzen safe_filename = "".join(c if c.isalnum() or c in (" ", ".", "_", "-") else "_" for c in decoded_name) if safe_filename.lower().endswith(".pdf"): filepath = os.path.join(DOWNLOAD_DIR, safe_filename) with open(filepath, "wb") as f: f.write(part.get_payload(decode=True)) print(f"PDF gespeichert: {filepath}") pdf_found = True # Falls PDF gefunden → in Zielordner verschieben & später löschen if pdf_found: result = mail.copy(num, PROCESSED_FOLDER) if result[0] == "OK": delete_list.append(num) else: print(f"Fehler beim Verschieben der Nachricht {num}") except Exception as e: print(f"Fehler beim Verarbeiten der Nachricht {num}: {e}") # Nach der Verarbeitung: löschen for num in delete_list: mail.store(num, "+FLAGS", "\\Deleted") mail.expunge() # Verbindung trennen mail.logout() print("Fertig! Alle neuen PDFs wurden heruntergeladen und verarbeitet.")