Über E-Mails in Mailbox iterieren und HTML parsen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import mailbox
import urllib
import lxml.html
 
box = 'testdata/mbox'
 
mbox = mailbox.mbox(box)
 
to_remove = []
 
for key, msg in mbox.iteritems(): # Iteriere über alle E-Mails
  print key, msg['from'], msg['date'] # Key der aktuellen E-Mail
  found_html = False
  for part in msg.walk(): # Iteriere über alle Teile der E-Mail
    content_type = part.get_content_type() # Content-Type extrahieren
    is_multipart = part.is_multipart() # Prüfen, ob Multipart
    print content_type
    if content_type == 'text/html' and not is_multipart: # text/html gefunden
      found_html = True
      html_content = part.get_payload(decode=True) # HTML Content extrahieren
      print '### HTML Content gefunden'
      #print html_content # gesamten HTML Content ausgeben
      html_dom = lxml.html.fromstring(html_content) # HTML parsen
      for url in html_dom.xpath('//a/@href'): # Alle URLs suchen (href im a-Tag)
        print url
      to_remove.append(key) # Mail kann gelöscht werden (weil Content gefunden...)
  if not found_html:
    print '### kein HTML Content gefunden'
 
mbox.lock() # Mailbox vor simultanem Zugriff schützen
try:
  for key in to_remove:
    print 'removing mail with key:', key
    #mbox.remove(key) # Mails, die verarbeitet wurden, aus Mailbox löschen
finally:
  mbox.flush()
  mbox.close()