un script qui dépose le "body" des emails non lus dans un fichier texte

Pour réaliser une passerelle entre des progiciels, je cherchais un moyen de relever une boite imap ou pop, et de placer le contenu des nouveaux e-mails dans des fichiers textes. Et uniquement le contenu (pas les entêtes toussa).

J'ai regardé du coté de mutt en ligne de commande, mais j'ai fini par trouver qu'en php (avec la lib php5-imap), c'était plus simple, et après tout php est un langage de script efficace qui peut etre utilisé pour autre chose que des pages web.

Voici mon script:

  1. <?php
  2. /*
  3. *Par gnieark http://blog-du-grouik.tinad.fr/ mars 2013
  4. *relève une boite aux lettres
  5. *et place le body des nouveaux messages dans un fichier texte.
  6. */
  7.  
  8. //parametres
  9. $imap_hote="mail.domaine.fr";
  10. $imap_port="143";
  11. $imap_identifiant="votreIdentifiantMail";
  12. $imap_password="password";
  13. $dossierDestination="/dossier/de/destination/";
  14.  
  15. //ouvrir la boite mail ADAPTEZ en fonction de vos parametres de connexion,
  16. //voir http://php.net/manual/fr/function.imap-open.php pour la liste des parametres possibles
  17. $imapConn=imap_open('{'.$imap_hote.':'.$imap_port.'/imap/tls}',$imap_identifiant,$imap_password);
  18. if($imapConn === FALSE){
  19. echo "probleme de connexion";
  20. die;
  21. }
  22.  
  23. //besoin d'avoir le nombre de messages total de la boite mails pour la suite
  24. $info = imap_check($imapConn);
  25. if (FALSE !== $info) {
  26. //télécharger les entetes des mails
  27. $mails = imap_fetch_overview($imapConn, "1:{$info->Nmsgs}", 0);
  28. //boucle pour tous les e-mails
  29. foreach($mails as $lemail){
  30. $mailId=$lemail->uid;
  31. //seul les non-lus m'interessent
  32. if($lemail->seen == '0'){
  33. //envoyer leur contenu dans un fichier texte
  34. file_put_contents($dossierDestination.$mailId.".txt",imap_fetchbody($imapConn,$mailId,1,FT_UID));
  35. //note: l'e-mail est considéré lu apres son passage dans la function imap_fetch_body
  36. }
  37. }
  38. imap_close($imapConn);
  39. }else{
  40. echo "impossible de lire le contenu de la boite email";
  41. }
  42. ?>

et une tache planifiée (cron) pour que ce soit fait toutes les 5 minutes

  1. su userUnixQuiReleveLeCourrier
  2. crontab -e

On y met:

*/5 * * * * /usr/bin/php5 /chemin/de/votre/script/php.php >/dev/null 2>&1
Page top