Bonjour,
On est souvent confronté a un problème qui peut sembler simple sur le papier mais qui en réalité est un peu plus complexe.
Le principe est d’écouter le dossier “mailbox” et sur les évènements executer un traitement. On va pour cela utiliser la commande “inotifywait”.
Tout d’abord installer inotifywait sur le serveur avec la commande suivante :
SERVER:~$ sudo apt-get install inotify-tools sudo: unable to resolve host mathieu-ubuntu [sudo] password for mathieu: Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait Les paquets supplémentaires suivants seront installés : libinotifytools0 Les NOUVEAUX paquets suivants seront installés : inotify-tools libinotifytools0 0 mis à jour, 2 nouvellement installés, 0 à enlever et 3 non mis à jour. Il est nécessaire de prendre 48,1 ko dans les archives. Après cette opération, 201 ko d'espace disque supplémentaires seront utilisés. Souhaitez-vous continuer [O/n] ? O Réception de : 1 http://fr.archive.ubuntu.com/ubuntu/ oneiric/universe libinotifytools0 i386 3.13-3 [21,2 kB] Réception de : 2 http://fr.archive.ubuntu.com/ubuntu/ oneiric/universe inotify-tools i386 3.13-3 [26,9 kB] 48,1 ko réceptionnés en 0s (113 ko/s) Sélection du paquet libinotifytools0 précédemment désélectionné. (Lecture de la base de données... 481663 fichiers et répertoires déjà installés.) Dépaquetage de libinotifytools0 (à partir de .../libinotifytools0_3.13-3_i386.deb) ... Sélection du paquet inotify-tools précédemment désélectionné. Dépaquetage de inotify-tools (à partir de .../inotify-tools_3.13-3_i386.deb) ... Traitement des actions différées (« triggers ») pour « man-db »... Paramétrage de libinotifytools0 (3.13-3) ... Paramétrage de inotify-tools (3.13-3) ... Traitement des actions différées (« triggers ») pour « libc-bin »... ldconfig deferred processing now taking place SERVER:~$
Ok “inotify-tools” est installé, on peut maintenant parcourir l’aide de ce petit outils avec la commande “inotifywait –help” :
SERVER:~$ inotifywait --help inotifywait 3.13 Wait for a particular event on a file or set of files. Usage: inotifywait [ options ] file1 [ file2 ] [ file3 ] [ ... ] Options: -h|--help Show this help text. @<file> Exclude the specified file from being watched. --exclude <pattern> Exclude all events on files matching the extended regular expression <pattern>. --excludei <pattern> Like --exclude but case insensitive. -m|--monitor Keep listening for events forever. Without this option, inotifywait will exit after one event is received. -r|--recursive Watch directories recursively. --fromfile <file> Read files to watch from <file> or `-' for stdin. -q|--quiet Print less (only print events). -qq Print nothing (not even events). --format <fmt> Print using a specified printf-like format string; read the man page for more details. --timefmt <fmt> strftime-compatible format string for use with %T in --format string. -c|--csv Print events in CSV format. -t|--timeout <seconds> When listening for a single event, time out after waiting for an event for <seconds> seconds. If <seconds> is 0, inotifywait will never time out. -e|--event <event1> [ -e|--event <event2> ... ] Listen for specific event(s). If omitted, all events are listened for.Exit status: 0 - An event you asked to watch for was received. 1 - An event you did not ask to watch for was received (usually delete_self or unmount), or some error occurred. 2 - The --timeout option was given and no events occurred in the specified interval of time.Events: access file or directory contents were read modify file or directory contents were written attrib file or directory attributes changed close_write file or directory closed, after being opened in writeable mode close_nowrite file or directory closed, after being opened in read-only mode close file or directory closed, regardless of read/write mode open file or directory opened moved_to file or directory moved to watched directory moved_from file or directory moved from watched directory move file or directory moved to or from watched directory create file or directory created within watched directory delete file or directory deleted within watched directory delete_self file or directory was deleted unmount file system containing file or directory unmounted SERVER:~$
On remarque plusieurs options intéressantes notamment l’option ” -e” qui permet de spécifier des evenements d’ecoute. Une commande du type “inotifywait -e create” va écouter les evenement de type “Création de fichier”. On trouve aussi l’option “-m” qui permet a inotify de ne pas s’arreter apres le premier evenement détecté. il existe aussi l’option “-c” qui permet de recupérer l’evenement sous un format CSV.
On va donc utiliser toutes ses options pour détecter les evenements qui nous intéresseavec la commande suivante :
SERVER:~#inotifywait -cm -e create /home/vpopmail/domains/domain.com/journal/Maildir/new/ | php parseMail.php
Cette commande permet de détecter les evenements de création de fichier dans le dossier mailbox du domaine domain.com . On execute à la suite de cet évènements la commande #php parseMail.php qui va traiter le mail recu.