Soyez le premier à donner votre avis sur cette source.
Vue 51 011 fois - Téléchargée 1 716 fois
<?php //Tout d'abord, on ouvre une boite mail $mail = imap_open("{nom serveur ou localhost ou autres/pop3}INBOX",'utilisateur','motdepasse'); //Quitte à la faire, autant le faire pour chaque message ! $nbmess = imap_num_msg($mail); if ($nbmess == 0) { print " <div align='center'> <b>Aucun message présent sur le serveur</b> <br /><br /> </div> "; } else { for($j=1;$j<=$nbmess;$j++) { //Extraction du sujet du message, pour ceux qui voudrait faire un test sur un titre au préalable $header = imap_headerinfo($mail,$j); $sujet = $header->subject; //Extraction de la structure du message $struct = imap_fetchstructure($mail,$j); // On compte le nombre de partie dans la structure du message if ($struct->type == 1) { $nbrparts = !$struct->parts ? "1" : count($struct->parts); } //On place le code binaire de la pièce dans un tableau $piece = array(); for($h=2;$h<=$nbrparts;$h++) { $part = $struct->parts[1] ; //Extraction du code binaire de la pièce jointe $piece = imap_fetchbody($mail,$j,$h); //Le 3 est spécifique à l'encodage en base64 (le plus répandu) pour les pièces jointes. if ($part->encoding == "3") { //Comptage du nombre de parametres $nbparam = count($part->parameters) for ($i = 0; $i < $nbparam ; $i++) { //Récupération du nom de la pièce jointe $param = $part->parameters[$i]; if ($param->attribute == "NAME") { $nom_fichier = $param->value; } else { $nom_fichier = "Nom de fichier introuvable"; } } //Décodage du code binaire de la pièce jointe $piece[$h] = imap_base64($piece[$h]); } $nom_fichier = str_replace(".doc","",$nom_fichier) ; //Ouverture du fichier et création s'il n'existe pas $newfichier = fopen("C:/".$nom_fichier.$h.".doc","w+"); //Ecriture dans le fichier fwrite($newfichier,$piece[$h]); //Fermeture du fichier fclose($newfichier); } } } ?>
24 août 2010 à 15:00
if(isset($nom_fichier)) if ($nom_fichier!=null) tu as oublié un {
24 août 2010 à 14:42
je n'arrive pas à faire fonctionner ce code.
J'ai remarqué avec des echo, qu'il ne rentrait pas dans la boucle property_exists et donc ni dans if (isset($part))
Je pense que le souci vient du $nbrparts = !$struct->parts ? "1" : count($struct->parts); qui vaut toujours 2. Alors que j'ai 4 e-mails dont un qui a une pièce jointe.
Quelqu'un peut--il m'expliquer la ligne $nbrparts = !$struct->parts ? "1" : count($struct->parts); ?
Merci pour votre aide.
28 juin 2010 à 12:55
2 property_exists
et de 2 isset,
pour un code qui ne renvoie pas d'erreur
$nbmess = imap_num_msg($mail);
if ($nbmess == 0)
{
echo "
Aucun message présent sur le serveur
";
}
else
{
for($j =1;$j<=$nbmess;$j++)
{
$header = imap_headerinfo($mail,$j);
$sujet = $header->subject;
echo "+ ".$sujet."
";
$struct = imap_fetchstructure($mail,$j);
if ($struct->type == 1)
{
$nbrparts = !$struct->parts ? "1" : count($struct->parts);
}
$piece = array();
for($h=1;$h<=$nbrparts;$h++)
{
if (property_exists($struct, "parts[1]")){$part = $struct->parts[1] ; }
$piece = imap_fetchbody($mail,$j,$h+1);
if (isset($part)){if (property_exists($part, "encoding")){if ($part->encoding == "3")
{
$nbparam = count($part->parameters);
$i=0;
while ($i < $nbparam)
{
$i++;
$param = $part->parameters[$i];
$nom_fichier = $struct->parts[$h]->dparameters[0]->value;
if($nom_fichier!=null)
{
echo ' /'.$nom_fichier.'
';
}
}
$piece = imap_base64($piece);
}
}}
if(isset($nom_fichier)) if ($nom_fichier!=null)
{
$newfichier = fopen("./files".$nom_fichier,"w+");
fwrite($newfichier,$piece);
fclose($newfichier);
}
}
}
}
19 août 2009 à 14:36
16 févr. 2009 à 11:56
je suis vraiment tres fiere pour les aide
j'ai essayer le code ca marche tres bien
je cherche un script qui donne le choix soit de consulter la piece jointe ou la telecharger ici
aider moi svp....!
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.