Ce forum est maintenant fermé, seule cette archive statique reste consultable.
  FORUM Rue-Montgallet.com
  Programmation
  Php - Sql

  IMAP - Extraction de piece jointe automatique

Bas de page
Auteur Sujet :

IMAP - Extraction de piece jointe automatique

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

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
mood
Pub
Posté le 28-12-2006 à 22:27:28  
 

n°18135
P-Y
Profil : Vieux de la vieille
Posté le 29-12-2006 à 01:26:32  
 

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


---------------
Le trikapalanet
n°18144
bakayero
Profil : Membre
Posté le 30-12-2006 à 19:55:22  
 

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  
 

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  
 

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  
 

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  
 

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  
 

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+

  FORUM Rue-Montgallet.com
  Programmation
  Php - Sql

  IMAP - Extraction de piece jointe automatique

© 2000-2024 Forum.rue-montgallet.com - Tous droits réservés