Traiter / Parser un mail lors de son arrivée

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.

 

Installation subversion Etape 2

Salut !!

Petit post pour finir l’install de subversion sur Gentoo en tant que module APACHE (merci dav 🙂 )

Je vous donnes mes fichiers de configuration.

Fichier ‘/etc/apache2/modules.d/47_mod_dav_svn’  :

<IfDefine SVN>
      <IfModule !mod_dav_svn.c>
              LoadModule dav_svn_module      modules/mod_dav_svn.so
      </IfModule>
      <Location /repos>
              DAV svn
              SVNPath /var/svn/repos
              AuthType Basic
              AuthName "Subversion repository"
              AuthUserFile /var/svn/mon_repository/conf/svnusers
              Require valid-user
      </Location>
      <IfDefine SVN_AUTHZ>
              <IfModule !mod_authz_svn.c>
                      LoadModule authz_svn_module    modules/mod_authz_svn.so
              </IfModule>
      </IfDefine>
</IfDefine>

Dans mon /httpd.conf

Verifier les lignes suivantes :

Code:

LoadModule dav_svn_module modules/mod_dav_svn.so 
LoadModule authz_svn_module modules/mod_authz_svn.so

<Location /svn>

      DAV svn
      SVNPath /home/ton_login/svn
      AuthType basic
      AuthName "SVN : TON SITE"
      AuthUserFile /home/ton_login/.htpasswd
      #AuthzSVNAccessFile /home/ton_login/svn.authz
      AuthzSVNAccessFile /home/ton_login/.authz
      <Limitexcept>
              Require valid-user
      </LimitExcept>
</Location>

Et voila si ca peut finir de vous aider

Installation Subversion sur Gentoo Release 2 d’ovh – Reprise d’un précédent post

Nous allons installer un subversion avec un webdav apache.

1/ Synchronisation d’emerge

#emerge --sync

Ca nous donne ca a peu pres à la fin :

 Performing Global Updates: /usr/portage/profiles/updates/1Q-2007 (Could take a couple of minutes if you have a lot of binary packages.)

.='update pass'  *='binary update'  @='/var/db move'
s='/var/db SLOT move' S='binary SLOT move' p='update /etc/portage/package.*'
......................

* IMPORTANT: 3 config files in /etc need updating.
* Type emerge --help config to learn how to update config files.
* An update to portage is available. It is _highly_ recommended
* that you update portage now, before any other packages are updated.
* Please do so and then update ALL of your configuration files.

 

2/ Activation de mod_dav pour apache. l’apache d’ovh n’as pas été compiler avec l’option –enable-dav, il faut donc le faire.

Pour ce faire, on va aller modifier le fichier ebuild pour spécifié cette option de conf :

#vi /usr/local/portage-ovh/net-www/apache-ovh/apache-ovh-2.0.58.ebuild

A la ligne 47, on saute une ligne et on ajoute ca :

--enable-dav

ou sauvegarde et on quitte …

Il faut maintenant regenerer la signature numérique du paquet.

#ebuild /usr/local/portage-ovh/net-www/apache-ovh/apache-ovh-2.0.58.ebuild digest

et ensuite on résintalle le paquet complet : Code:

#emerge apache-ovh

3/ apxs

Emerge a besoin d’apxs2 pour installer subversion. Je ne l’avais pas sur le dédié donc j’ai feinté.

# ln -s /usr/local/apache/bin/apxs /usr/sbin/apxs2

4/ installation de subversion

#emerge subversion

On a maintenant subversion d’installé. il ne nous reste plus qu’a le configurer mais je ferai un nouveau post quand j’aurai fini ma propre configuration

Les boutons sociaux

Les réseaux sociaux prennent de plus en plus d’ampleur de nos jours. Les nouveaux algorithmes de Google les prennent de plus en plus en compte. Il devient important pour le référencement naturel de parler de nous sur ces nouveaux vecteurs de communications.

Voici quelques exemples de codes pour insérer les différents boutons :

  • Facebook :
    <!-- Inclusion pour facebook -->
    <div id="fb-root"></div>
    <script>
    (function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/fr_FR/all.js#xfbml=1";
    fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));</script>
    
    <div data-href="URL_A_RECOMMANDER" data-send="true" data-layout="button_count" data-width="450" data-show-faces="false" data-action="recommend" data-font="arial" data-ref="fblikeButton"></div>
  • Pinterest :
    <script type="text/javascript" src="//assets.pinterest.com/js/pinit.js"></script>
    
    <a href="http://pinterest.com/pin/create/button/?url=URL_A_RECOMMANDER_ENCODEE&media=URL_A_RECOMMANDER_ENCODEE&description=DESCRIPTION_ENCODEE" count-layout="none"><img border="0" src="//assets.pinterest.com/images/PinExt.png" title="Pin It" style="vertical-align: top;margin:none;"/></a>
  • Twitter : 
    <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
    
    <a href="https://twitter.com/share" data-via="TWITTER_USER" data-lang="fr" data-related="TWITTER_RELATED" data-hashtags="TWITTER_HASHTAG">Tweeter</a>

Je modifierai ce post au fur et à mesure que le nombre de boutons sociaux intéressants augmentera.