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.")
