import os

from mailman.interfaces.listmanager import IListManager
from mailman.interfaces.messages import IMessageStore
from mailman.interfaces.requests import IListRequests
from zope.component import getUtility

def msgs_del():
    msg_ids = {}
    lm = getUtility(IListManager)
    ms = getUtility(IMessageStore)
    for mlist in lm.mailing_lists:
        requestdb = IListRequests(mlist)
        for rq in requestdb.held_requests:
            key, msgdata = requestdb.get_request(rq.id)
            if msgdata['_request_type'] != 'held_message':
                continue
            msg = ms.get_message_by_id(key)
            msg_ids[(msg['Message-ID-Hash'])] = True
    count = 0
    for root, dirs, files in os.walk('/opt/mailman/mm/var/messages'):
        for fn in files:
            if not msg_ids.get(fn, False):
                msg = ms.get_message_by_hash(fn)
                if msg:
                    ms.delete_message(msg['Message-ID'])
                    count += 1
    print('Deleted {} message files.'.format(count))
