Récupérer une pièce jointe en php

Petit nouveau ! | 2 Messages

04 juil. 2011, 14:57

Bonjour,

J'ai créé un client Mail en php récupérant et listant tout les mails reçu à une adresse, lorsque je clique sur le message choisi l'entête, le contenu et le(s) pièce(s) jointe s'affichent un peu plus bas, le problème c'est que sur certains mails il m'est indiqué qu'il n'y a aucune pièce jointe pourtant lorsque je passe par une boite mail (du genre Thunderbird) je vois qu'il y a bien une pièce jointe. J'ai peur que cela ne soit dû à l'extension de la PJ, je reçois généralement les PJ en .pdf et je n'ai eu que très peu de problèmes mais lorsque la PJ est en .doc et même de temps en temps en .eml alors là catastrophe ! "Aucune pièce jointe".
Sauriez vous à quoi cela est dû ?

Merci d'avance pour votre aide !


[EDIT] De plus en plus de mail arrivent sans contenir de PJ sur l'appli et pourtant ils sont censées en contenir une ... Par contre maintenant ça c'est généralisé sur toutes les extensions même .pdf, je ne comprends vraiment pas d'où cela peut venir, comment ce fait il que l'appli trouve certaine PJ et d'autre non ?? [/EDIT]

Voici le code entier du chargement de mon mail :

<?php

private function getpart($part,$numpart,$data)
    {    
    	if ($data == 0)
    	$data = ($numpart)?	//si différent de 0
    		imap_fetchbody($this->connexion,$this->UID,$numpart,FT_UID) : //alors multipart
    		imap_body($this->connexion, $this->UID, FT_UID); //sinon notmultipart
    		
    	//Décodage des données
    	if ($part->encoding == 4)
    	{
    		$data = quoted_printable_decode($data);
    	}
    	elseif ($part->encoding == 3)
    	{
    		$data = base64_decode($data);
    	}
/** WARNING ! Il n'est pas nécessaire de décoder 0 (7bit) 1(8bit) 2(binary)**/
    	
    	//Récupération des paramètres
    	$params = array();
    	if ($part->ifparameters)
    	{
    		foreach ($part->parameters as $x)
    		{
    			$params[strtolower($x->attribute)] = $x->value;
    		}
    	}
    	if ($part->ifdparameters)
    	{
    		foreach ($part->dparameters as $x)
    		{
    			$params[strtolower($x->attribute)] = $x->value;
    		}
    	}
    	if ($part->type == 0) //TEXT
    	{//Le message peut être contenu dans plusieurs parties du mail
    	//Donc on incrémente le contenu final et on saute une ligne après chq partie
    		if ($part->ifsubtype)
    		{
    			if (strtolower($part->subtype) == 'plain')
    			{
    				$this->plainmsg.= trim($data)."\n\n";
    			}
    			elseif (strtolower($part->subtype) == 'html')
    			{
    				$this->htmlmsg.= trim($data)."<br><br>";
    			}
    		}
    		else $this->htmlmsg.="Erreur dans le mail une partie est erronée.<br><br>";
    	}
    	elseif ($part->type == 1) //MULTIPART
    	{
    		if ($part->ifsubtype)
    		{
    			if (strtolower($part->subtype) == 'mixed' )
    			{
    				$numpart=substr($numpart, 0,-2);
    				foreach ($part->parts as $partno0 => $part2)
    	 			{
    	 				$this->getpart($part2,$numpart.'.'.($partno0+1),imap_fetchbody($this->connexion,$this->UID,$numpart,FT_UID));
    	 			}
    			}
    			else 
    			{
    				foreach ($part->parts as $partno0 => $part2)
    	 			{
    	 				$this->getpart($part2,$numpart.'.'.($partno0+1),imap_fetchbody($this->connexion,$this->UID,$numpart,FT_UID));
    	 			}
    			}
    		}
    		else
    		{
    			foreach ($part->parts as $partno0 => $part2)
    	 		{
    	 			$this->getpart($part2,$numpart.'.'.($partno0+1),0);
    	 		}
    		}
    	}
    	elseif ($part->type == 2) //MESSAGE
    	{
    			foreach ($part->parts as $partno0 => $part2)
    	 		{
    	 			$this->getpart($part2,$numpart.'.'.($partno0+1),0);
    	 		}
    	}
   		elseif ($part->type == 3)//APPLICATION
    	{
    		if ((isset ($params['filename']) || isset ($params['name']))) 
    		{//le nom du fichier peut soit etre indiqué en filename ou en name ou les deux
    			$filename = (isset($params['filename']))? $params['filename'] : $params['name'];
    			$filename = $this->decode_text($filename);
    			$this->fichier_joint[$filename] = new FicJoint($data, $filename,$part->subtype);
    		}
    		else $this->htmlmsg.="<br><br>Erreur dans la pièce jointe.<br><br>";
    	}
    } ?>

Petit nouveau ! | 2 Messages

05 juil. 2011, 16:53

UP