Bonjour,
Voici la fonction : function lireEmail( $id_msg, $num_partie, $partie, $niveau, $alternative=0 ) { //tableau contenant les informations static $retour = Array('message' => '' ); //si la partie contient des infomrations sru la disposition //et que la chaine indique "attachment", alors nous avons //affaire à une pièce jointe if ( $partie->ifdisposition && strtolower($partie->disposition) == "attachment" ) { echo "<br/><b>fichier</b>"; //on récupère le nom et quelques infos //qu'on ajoute au tableau de résultats. //on suppose la fonction trouverNom qui parourt //le tableau parameters jusqu'à trouver le paramètre //name, et en retourner la valeur if ($partie->ifdparameters) { $fichier = array( 'nom' => $this->trouverNom($partie->dparameters), 'numero_partie' => $num_partie, 'encodage' => $partie->encoding, 'taille' => $partie->bytes); } if ($partie->ifparameters) { $fichier = array( 'nom' => $this->trouverNom($partie->parameters), 'numero_partie' => $num_partie, 'encodage' => $partie->encoding, 'taille' => $partie->bytes); } $retour['fichiers'][] = $fichier; } else { switch ($partie->type ) { case TYPETEXT: // si c'est du texte if ( $alternative) // et que c'est un texte avec une alternative { if ($this->mail_format == $partie->subtype) // on fait un test du format à afficher { $texte = imap_fetchbody( $this->flux, $id_msg, $num_partie); $retour['message'] = "".nl2br($this->decoder($texte,$partie->encoding)).""; } } else // si c'est pas alternatif, on affiche { if( !empty($partie->parts) ) { // on lit le texte à la partie qui nous interesse. $texte = imap_fetchbody( $this->flux, $id_msg, $num_partie); $retour['message'] = "".$this->decoder($texte,$partie->encoding).""; } else { if ($partie->subtype == 'PLAIN') // on lit le texte PLAIN { $texte = imap_body( $this->flux, $id_msg); $retour['message'] = "".nl2br($this->decoder($texte,$partie->encoding)).""; } else if($partie->subtype == 'HTML') // on le texte HTML { $texte = imap_body( $this->flux, $id_msg); $retour['message'] = "".$this->decoder($texte,$partie->encoding).""; } } } break; case TYPEMULTIPART:// si c'est pas du texte alors on se rappelle if ($partie->subtype == "ALTERNATIVE") { $alternative = 1; } //on lit chaque sous parts. for ( $i=0;$i<count($partie->parts); $i++) { if ($niveau != 0 ) { $pos = strrpos($num_partie, "."); if ($pos === false) { // si on trouve pas de point, on en ajoute un sinon pas : pas de double point $num_partie = $num_partie."."; } } else { $num_partie = ""; } $this->lireEmail($id_msg, $num_partie.($i + 1), $partie->parts[$i], 1, $alternative); } break; /*case TYPEMESSAGE: case TYPEAPPLICATION: case TYPEAUDIO: case TYPEIMAGE: case TYPEVIDEO: case TYPEMODEL:*/ default: if ($partie->ifdparameters) { $fichier = array( 'nom' => $this->trouverNom($partie->dparameters), 'numero_partie' => $num_partie, 'encodage' => $partie->encoding, 'taille' => $partie->bytes); } if ($partie->ifparameters) { $fichier = array( 'nom' => $this->trouverNom($partie->parameters), 'numero_partie' => $num_partie, 'encodage' => $partie->encoding, 'taille' => $partie->bytes); } $retour['fichiers'][] = $fichier; break; } } return $retour; } //l'appel à la fonction $struct = imap_fetchstructure($this->flux,$id_msg); $partie = $struct; $email = $this->lireEmail($id_msg, 0, $partie, 0);
|