Gelöscht aber noch da?

Dieses kleine Python-Script iteriert über sämtliche Ordner einer IMAP-Mailbox und gibt - falls vorhanden - die Zahl an eMails aus die zwar als gelöscht markiert wurden, aber nocht nicht expunged sind.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import unicode_literals

import imaplib, email, re

list_response_pattern = re.compile(r'\((?P<flags>.*?)\) "(?P<delimiter>.*)" (?P<name>.*)')

def parse_list_response(line):
    flags, delimiter, mailbox_name = list_response_pattern.match(line).groups()
    return (flags, delimiter, mailbox_name)

# Hier die entsprechenden Daten eintragen
HOST = 'imap.server.de'
USERNAME = 'username'
PASSWORD = 'passwort'

# Verbindung herstellen
#server = imaplib.IMAP4(HOST)

# SSL-gesicherte Verbindung herstellen, default port 143 benutzen
server = imaplib.IMAP4_SSL(HOST)

# Anmelden
server.login(USERNAME, PASSWORD)
print "Mit Server verbunden und angemedet"

# Alle mailboxen (= Ordner) auflisten (und in mailboxes speichern)
mb, mailboxes = server.list()

# Über mailboxes iterieren
for line in mailboxes:
    flags, delimiter, mailbox_name = parse_list_response(line)

    # Mailbox auswählen
    server.select(mailbox_name,readonly=True)

    # gibt eine liste mit ids der ungelesenen Mails zurück
    status, response = server.search(mailbox_name, '(DELETED)')
    msg_nums = response[0].split()

    if len(msg_nums) != 0:
        # Anzahl der mails ausgeben, die als gelöscht markiert sind
        print str(len(msg_nums)) + " gelöschte Nachricht(en) in " + mailbox_name

        typ, data = server.search(None, 'DELETED')
        if typ != 'OK':
            print "Fehler beim Auslsenen der Mails"
        else:
            for num in data[0].split():
                typ, data = server.fetch(num, '(RFC822)')

                for response_part in data:
                    if isinstance(response_part, tuple):
                        msg = email.message_from_string(response_part[1])
                        varSubject = msg['subject']
                        varFrom = msg['from']
                        varDate = msg['Date']

                # die spitzen Klammern um den Absender entfernen
                varFrom = varFrom.replace('<', '')
                varFrom = varFrom.replace('>', '')

                # "..." hinzufügen falls Betreff laenger als 65 Zeichen ist
                if len( varSubject ) > 65:
                    varSubject = varSubject[0:32] + '...'

                # Details zur eMail ausgeben
                print varDate + " " + varFrom.split()[-1] + " " + varSubject

server.close()
server.logout()
print "Vom Server abgemeldet"

Die Ausgabe sieht, sinngemäß, so aus:

Mit Server verbunden und angemedet
1 gelöschte Nachricht(en) in "INBOX"
Tue, 13 Jan 2015 21:42:48 +0100 absender@server.org Re: Betreff-Zeile
Vom Server abgemeldet

Geschrieben von Jan Niggemann in Computer und Technik am 13.01.2015