Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

Il y a 57 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

IMAP - Extraction de piece jointe automatique

 
n°18133
bakayero
Profil : Membre
Posté le 28-12-2006 à 22:27:28  profilanswer
 

Bonjour,  
 
je cherche a finir ce code mais des erreurs sont presente et j'arrive pas a resoudre le probleme/
C'est un script qui sert a faire une extraction de piece jointe automatique et place la piece jointe dans un dossier spécifique.
Ce script se connecte a une boite IMAP, mais si kelkun arrive a le faire marcher sur une boite POP, c 'est sympa aussi!
Merci d'avance
 
Voici le code :
 

Code :
  1. <?php
  2.  
  3. //Tout d'abord, on ouvre une boite mail  
  4. $mail = imap_open("{imap.domaine.fr:143}INBOX","mail@toto.fr","pass" );
  5.  
  6. //Quitte à la faire, autant le faire pour chaque message !  
  7. $nbmess = imap_num_msg($mail);
  8. if ($nbmess == 0)
  9. {
  10. echo "
  11.     <div align='center'>
  12.      <b>Aucun message présent sur le serveur</b>
  13. <br /><br />
  14.     </div>
  15. ";
  16. }
  17. else
  18. {
  19. for($j=1;$j<=$nbmess;$j++)
  20. {
  21. $header = imap_headerinfo($mail,$j);
  22. $sujet = $header->subject;
  23. echo "+ ".$sujet."<br>"; 
  24. $struct = imap_fetchstructure($mail,$j);
  25. if ($struct->type == 1)
  26. {
  27. $nbrparts = !$struct->parts ? "1" : count($struct->parts);
  28. }
  29.  
  30. $piece = array();
  31. for($h=1;$h<=$nbrparts;$h++)
  32. {
  33. $part = $struct->parts[1] ;
  34.  
  35. $piece = imap_fetchbody($mail,$j,$h+1);
  36.  
  37. if ($part->encoding == "3" )
  38. {
  39. $nbparam = count($part->parameters);
  40. $i=0;
  41. while ($i < $nbparam)
  42. {
  43. $i++;
  44. $param = $part->parameters[$i];
  45. $nom_fichier = $struct->parts[$h]->dparameters[0]->value;
  46. }
  47. $piece = imap_base64($piece);
  48. }
  49. $newfichier = ""; 
  50. //Ouverture du fichier et création s'il n'existe pas  
  51. $newfichier = fopen("../recup/".$nom_fichier,"w+" );
  52. //Ecriture dans le fichier  
  53. fwrite($newfichier,$piece);
  54. //Fermeture du fichier  
  55. fclose($newfichier);
  56. }
  57. }
  58.   }
  59. ?>


 
Voici les erreurs :
+ Fw: test
 
Notice: Undefined variable: nom_fichier in e:\easyphp1-8\www\mail\index444.php on line 54
 
Warning: fopen(../recup/): failed to open stream: Permission denied in e:\easyphp1-8\www\mail\index444.php on line 54
 
Warning: fwrite(): supplied argument is not a valid stream resource in e:\easyphp1-8\www\mail\index444.php on line 56
 
Warning: fclose(): supplied argument is not a valid stream resource in e:\easyphp1-8\www\mail\index444.php on line 58
 
Notice: Undefined variable: nom_fichier in e:\easyphp1-8\www\mail\index444.php on line 54
 
Warning: fopen(../recup/): failed to open stream: Permission denied in e:\easyphp1-8\www\mail\index444.php on line 54
 
Warning: fwrite(): supplied argument is not a valid stream resource in e:\easyphp1-8\www\mail\index444.php on line 56
 
Warning: fclose(): supplied argument is not a valid stream resource in e:\easyphp1-8\www\mail\index444.php on line 58
 
 
AIDER MOI PLEASE ! lol


Message édité par bakayero le 28-12-2006 à 22:53:28
n°18135
P-Y
Intermittent du troll
Profil : Vieux de la vieille
Posté le 29-12-2006 à 01:26:32  profilanswer
 

Le "permission denied" semble indiquer que tu n'as pas les droits en ecriture dans le repertoire recup...


---------------
"Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent."
[:zzzinv][url=http://www.mozilla-europe.
n°18144
bakayero
Profil : Membre
Posté le 30-12-2006 à 19:55:22  profilanswer
 

Si justemet j'ai placé des droits 777 sur le dossier de recup, mais toujours les memes erreur !!!
Peux etre une erreur de codage ?

n°18150
bakayero
Profil : Membre
Posté le 02-01-2007 à 09:18:55  profilanswer
 

Je suis toujours bloqué au meme endroit.
Si quelqu'un a une solution pour que j'avance ....
Merci encore, Moi je profite de la matiné pour continuer mes recherches.

n°18153
Silene
Profil : Jeune recrue
Posté le 04-01-2007 à 01:05:10  profilanswer
 

Je crois avoir une idée, je suis sur le même truc: il n'y a pas de nom de fichier. Le niveau de tableau/objet n'est  pas bon.
 
 
$struct = imap_fetchstructure($mail,$j);  
A coups de while(list($a, $b) : each ($struct)) imbriqués les uns sans les autres, je susi arricé à déplier tout le $struct. Il apparaît qu'il y a plusieurs [encoding]
Un au premier niveau ici ligne 2, à 0, et c'est celui-là qu'on a à if ($part->encoding == "3" )
 
Il y a un deuxième[encoding] au 2e niveau [parts][encoding], ici à 4, et deux au 4e niveau, l'un à 0 et l'autre à 3.
Je crois que c'est cette valeur qu'il faut récupérer. Mias comment l'écrire?  Idem, même niveau pour le nom du fichier, au tien la valeur est vide.
 
Niveau 1. [type] - 1
Niveau 1. [encoding] - 0
Niveau 1. [ifsubtype] - 1
Niveau 1. [subtype] - ALTERNATIVE
Niveau 1. [ifdescription] - 0
Niveau 1. [ifid] - 0
Niveau 1. [bytes] - 89058
Niveau 1. [ifdisposition] - 0
Niveau 1. [ifdparameters] - 0
Niveau 1. [ifparameters] - 1
Niveau 1. [parameters] - Array
- Niveau 2 [0] /-- Niveau 3 [attribute] BOUNDARY ;  
-- Niveau 3 [value] Apple-Mail-4-541384857 ;  
Niveau 1. [parts] - Array
- Niveau 2 [0] /-- Niveau 3 [type] 0 ;  
-- Niveau 3 [encoding] 4 ;  
-- Niveau 3 [ifsubtype] 1 ;  
-- Niveau 3 [subtype] PLAIN ;  
-- Niveau 3 [ifdescription] 0 ;  
-- Niveau 3 [ifid] 0 ;  
-- Niveau 3 [lines] 6 ;  
-- Niveau 3 [bytes] 121 ;  
-- Niveau 3 [ifdisposition] 0 ;  
-- Niveau 3 [ifdparameters] 0 ;  
-- Niveau 3 [ifparameters] 1 ;  
-- Niveau 3 [parameters] Array ;  
--- Niveau 4 [0] - Object
-----Niveau 5 [attribute] - CHARSET
-----Niveau 5 [value] - UTF-8
--- Niveau 4 [1] - Object
-----Niveau 5 [attribute] - DELSP
-----Niveau 5 [value] - yes
--- Niveau 4 [2] - Object
-----Niveau 5 [attribute] - FORMAT
-----Niveau 5 [value] - flowed
- Niveau 2 [1] /-- Niveau 3 [type] 1 ;  
-- Niveau 3 [encoding] 0 ;  
-- Niveau 3 [ifsubtype] 1 ;  
-- Niveau 3 [subtype] RELATED ;  
-- Niveau 3 [ifdescription] 0 ;  
-- Niveau 3 [ifid] 0 ;  
-- Niveau 3 [bytes] 88639 ;  
-- Niveau 3 [ifdisposition] 0 ;  
-- Niveau 3 [ifdparameters] 0 ;  
-- Niveau 3 [ifparameters] 1 ;  
-- Niveau 3 [parameters] Array ;  
--- Niveau 4 [0] - Object
-----Niveau 5 [attribute] - TYPE
-----Niveau 5 [value] - text/html
--- Niveau 4 [1] - Object
-----Niveau 5 [attribute] - BOUNDARY
-----Niveau 5 [value] - Apple-Mail-5-541384857
-- Niveau 3 [parts] Array ;  
--- Niveau 4 [0] - Object
-----Niveau 5 [type] - 0
-----Niveau 5 [encoding] - 0
-----Niveau 5 [ifsubtype] - 1
-----Niveau 5 [subtype] - HTML
-----Niveau 5 [ifdescription] - 0
-----Niveau 5 [ifid] - 0
-----Niveau 5 [bytes] - 514
-----Niveau 5 [ifdisposition] - 0
-----Niveau 5 [ifdparameters] - 0
-----Niveau 5 [ifparameters] - 1
-----Niveau 5 [parameters] - Array
--------- Niveau 6 [0] - Object
---------------Niveau 7 [attribute] - CHARSET
---------------Niveau 7 [value] - US-ASCII
--- Niveau 4 [1] - Object
-----Niveau 5 [type] - 5
-----Niveau 5 [encoding] - 3
-----Niveau 5 [ifsubtype] - 1
-----Niveau 5 [subtype] - JPEG
-----Niveau 5 [ifdescription] - 0
-----Niveau 5 [ifid] - 1
-----Niveau 5 [id] -  
-----Niveau 5 [bytes] - 87738
-----Niveau 5 [ifdisposition] - 1
-----Niveau 5 [disposition] - INLINE
-----Niveau 5 [ifdparameters] - 1
-----Niveau 5 [dparameters] - Array
--------- Niveau 6 [0] - Object
---------------Niveau 7 [attribute] - FILENAME
---------------Niveau 7 [value] - auguste-1.jpg
-----Niveau 5 [ifparameters] - 1
-----Niveau 5 [parameters] - Array
--------- Niveau 6 [0] - Object
---------------Niveau 7 [attribute] - X-UNIX-MODE
---------------Niveau 7 [value] - 0644
--------- Niveau 6 [1] - Object
---------------Niveau 7 [attribute] - NAME
---------------Niveau 7 [value] - auguste-1.jpg
 
Code  
 
$struct = imap_fetchstructure($mail,$j);  
while (list($a, $b) = each($struct)) {
echo"Niveau 1. [$a] - $b<br>\n";
if(is_array($b)) {
while(list($l, $m) = each($b)) {
echo"- Niveau 2 [$l] /";
while(list($u, $i) = each($m)) {
 echo "-- Niveau 3 [$u] $i ; <br>\n";
if(is_array($i)) {
while(list($u2, $i2) = each($i)) {
echo"--- Niveau 4 [$u2] - $i2<br>";
while(list($u3, $i3) = each($i2)) {
echo"-----Niveau 5 [$u3] - $i3<br>";
if(is_array($i3)) {
while(list($n, $p) = each($i3)) {
echo"--------- Niveau 6 [$n] - $p<br>";
while(list($aq, $bq) = each($p)) {
echo"---------------Niveau 7 [$aq] - $bq<br>";
if(is_array($bq)) {
while(list($aq2, $bq2) = each($bq)) {
echo"--------------------- Niveau 8 [$aq2] - $bq2<br>";
}
}
}
}
}
}
}
}  
}
}
}
}


Message édité par Silene le 04-01-2007 à 01:20:34
n°19043
hvella
Profil : Jeune recrue
Posté le 12-11-2007 à 13:34:30  profilanswer
 

Bonjour,
je cherche egalement a extraire les pieces jointes automatiquement.....
En lisant votre code, je commencerai d'abord par mettre le repertoire ../recup/ en ./recup/
Et de mettre le rep recup au meme niveau que votre fichier index444.php.
Ca peut paraitre bizard mais j'ai deja eu ce genre de pb avec les remontées de repertoire.(malgré 777).
Verifie que easy php est bien  configuré pour imap. c une extension qui n'est pas par defaut dans apache php.
Meme si easyphp est configuré les fonctions imapxxx sont native et ont des comportements qu'on ne peut parfois pas régler/entraver.
 
Je n'ai pas reussi a voir si ton probleme etait recent ou pas ? donc j'ai peut etre 1 ou 2 ans de retard pour la réponse !
 
Si vous avez trouvé merci pour les infos soluces...
je posterai mon code sur ce forum quand j'aurai trouvé.
 
 :hello:  :hello:

n°19044
hvella
Profil : Jeune recrue
Posté le 12-11-2007 à 13:39:47  profilanswer
 

Bon ca yest j'ai vu les dates !  
J'ai 11 mois de retard ! c pas grave.
Le probleme des .. dont je parlai au dessus est lié au fopen.
Ton mail avec imap c une autre histoire en fait et ca a l air de marcher. donc oubliez la partie imap.
En plus tu pourrait faire
$chemin='./recup/'.$fichier;
puis fopen($chemin,"w+" );
a+

n°19045
hvella
Profil : Jeune recrue
Posté le 12-11-2007 à 13:54:27  profilanswer
 

j'aurai egalement incrementé le i apres parce que tu perd le parts[0]
Vu que nom_fichier et param sont dans la boucle while c sont des tableaux et nom des variables
$nom_fichier[] = array();
$param[] = array();
$i=0;
 while ($i < $nbparam)
  {
  $param[$i] = $part->parameters[$i];
  $nom_fichier[$i] = $struct->parts[$h]->dparameters[0]->value;
  $i++.
   }
....
et apres  
for($i=0;$i<count($nom_fichier);$i++)
   {
   $chemin='./recup/'.$nom_fichier[$i];
   fopen($chemin,"w+" );  
   fwrite...
   fclose...
   }
 
a+


Aller à :
Ajouter une réponse