Notification basique pour Maildir

 · Jean Schurger

Je collecte mes courriels avec offlineimap et les lis avec mu/mu4e. L'ensemble fonctionne bien et rapidement, mais il me manquait les notifications de nouveau courriel. Voila une solution basique mais efficace.

#!/usr/bin/env python

import os
import dbus

from email.parser import Parser
from pyinotify import WatchManager, Notifier
from pyinotify import ProcessEvent, EventsCodes

INBOX = os.path.join(os.getenv('HOME'), 'Maildir', 'INBOX', 'new')

def notify(summary, body='', app_name='', app_icon='',
           timeout=5000, actions=[], hints=[], replaces_id=0):
    bus_name = 'org.freedesktop.Notifications'
    dbus.Interface(dbus.SessionBus().get_object(
        bus_name, '/org/freedesktop/Notifications'),
        bus_name).Notify(
        app_name, replaces_id, app_icon,
        summary, body, actions, hints, timeout)

class PTmp(ProcessEvent):
    def process_default(self, event):
        email = Parser().parse(open(event.pathname))
        notify("Nouveau courriel de '%s'" % email.get('From'),
               email.get('Subject'))

if __name__ == "__main__":
    wm = WatchManager()
    FLAGS = EventsCodes.ALL_FLAGS
    mask = FLAGS['IN_MOVED_TO']
    notifier = Notifier(wm, PTmp())
    wm.add_watch(INBOX, mask, rec=True, auto_add=True)
    notifier.loop()