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