Récupérer les pièces jointes d’un mail en PHP via IMAP

Bonjour à tous!

Ce matin je faisais un peu de R&D au bureau pour savoir comment récupérer des mails d’un compte et sauvegarder les pièces jointes et les traiter plus tard. Après un peu de recherche sur google et twitter, je suis d’abord tombé sur IMAP. Et un peu après sur une classe publiée sur le site phpclasses. La classe marche plutôt pas mal, sauf quelques petits problèmes. Tout d’abord les fichiers utilisent les short_open_tag de PHP, beaucoup de warnings sont levés si les messages traités ne contiennent pas de pièces jointes et enfin des paramètres passés à certaines fonctions sont notés comme constantes, comme par exemple le mode d’ouverture de fichier de la fonction fopen.

Bref, après plusieurs essais et modifications de mon côté, j’ai transformé cette classe en full objet, documentée et ajouter quelques conditions de gestion d’erreurs. La voici en pièce jointe.

Pour ce qui est de l’utilisation, voici une petite démo rapide d’utilisation pour parcourir sa boite mail et sauvegarder les messages dans un dossier défini :

#!/usr/bin/env php
#!/usr/bin/env php
<?php
require_once("attachmentread.class.php");
$host="{host:port/params}BOX"; // voir http://fr.php.net/imap_open
$login=""; //imap login
$password=""; //imap password
$savedirpath="./" ; // attachement will save in same directory where scripts run othrwise give abs path
$jk=new MailAttachmentManager($host, $login, $password, $savedirpath); // Creating instance of class####
$jk->getData(); // calling member function
?>

N’hésitez pas a commenter ou faire des suggestions par rapport au code. Prochaine étape trouver un moyen de sécuriser la boite mail qui va recevoir les pièces jointes pour les attacher à un utilisateur d’un site. Un peu comme Flickr qui permet d’ajouter des photos à son stream par mail.

Bon appétit!

Tags: , , , , ,

  • cole

    Bonjour,

    C’est alléchant, comme ça, mais, impossible d’avoir accès à la pièce jointe.

  • http://blog.luxifer.fr/ Florent VIEL

    Quel protocole de messagerie utilisez-vous? Ma classe ne fonctionne qu’avec imap. J’ai fais un test avec ma boîte gmail, je récupère bien les pièces jointes

  • thomas Bailly

    Bonjour,
    A mon avis il veut dire qu’on a pas accès à votre pièce jointe (attachmentread.class.php) sur le site castle.co car le lien ne fonctionne pas…
    Je serais aussi intéresser de la voir…

    Merci.

  • http://blog.luxifer.fr/ Florent VIEL

    Ah oui effectivement, je vais changer le lien pour github