Récupération pièces jointes de mails et enregistrement sur serveur web

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [Partage] Récupération pièces jointes de mails et enregistrement sur serveur web

    Bonjours à tous,

    Il y a quelques temps, j'avais ouvert un post vous demandant les possiblités de récupérer les pièces jointe d'un mail pour les enregistrer sur mon serveur web et ainsi mettre à jour certaines pages de mon site grace à une nouvelle fonction en cours de test du plugin UP de Lomart (file_in_content) par un simple envoi de mail.
    Vous m'aviez donné certaines pistes qui m'ont permis d'avancer sur le sujet.
    Après bien des tentatives et bien des échecs, j'ai enfin réussi à lister et surtout détacher mes 2 pièces jointes pour les enregistrer sur le serveur (je n'arrivais à détacher qu'une seule pièce jointe à la fois).
    Il m'a fallu rajouter un
    Code:
    if($name)
    dans le
    Code:
    foreach ($attachments as $i => $attachment){}
    pour que les 2 fichiers soient bien enregistrés
    L'ensemble du code est donc
    Code:
    foreach ($attachments as $i => $attachment)
         {
            $name = $attachment['name'];
            $contents = $attachment['attachment'];
            echo "Pièce jointe : " .$name. "<br />\n";
            echo "valeur key : " .$i. "<br />\n";    
         if($name)
         {file_put_contents($name,$contents);}
         }
    Pour ceux qui seraient intéressés, Je vous livre l'ensemble du code qui fonctionne sous PHP 8.0.19
    Code:
     <?php
    
    //ouvre inbox listing messages et copie pièces jointes multiples
    
    $server="{serveur:port/tls}INBOX"; //  connection au dossier inbox de la mailbox
    $username="nom_utilisateur"; //imap login
    $password="mot_de_passe"; //imap password
    
        $imap = imap_open($server, $username, $password) or die("imap connection error");
        $message_count = imap_num_msg($imap);
        for ($m = 1; $m <= $message_count; ++$m)
    {    
    $header = imap_headerinfo($imap, $m);
            //print_r($header);
    
            $email[$m]['from'] = $header->from[0]->mailbox.'@'.$header->from[0]->host;
            $email[$m]['fromaddress'] = $header->from[0]->personal;
            $email[$m]['to'] = $header->to[0]->mailbox;
            $email[$m]['subject'] = $header->subject;
            $email[$m]['message_id'] = $header->message_id;
            $email[$m]['date'] = $header->udate;
    
            $from = $email[$m]['fromaddress'];
            $from_email = $email[$m]['from'];
            $to = $email[$m]['to'];
            $subject = $email[$m]['subject'];
        $structure = imap_fetchstructure($imap, $m);
        $attachments = array();
        if (isset($structure->parts) && count($structure->parts))
        {
            for ($i = 0; $i < count($structure->parts); $i++)
            {
                $attachments[$i] = array(
                    'is_attachment' => false,
                    'filename' => '',
                    'name' => '',
                    'attachment' => '');
                if ($structure->parts[$i]->ifdparameters)
                {
                    foreach($structure->parts[$i]->dparameters as $object)
                    {
                     if(strtolower($object->attribute) == 'filename')
                        {
                         $attachments[$i]['is_attachment'] = true;
                         $attachments[$i]['filename'] = $object->value;
                        }
                    }
                }
    
                if ($structure->parts[$i]->ifparameters)
                {
                    foreach($structure->parts[$i]->parameters as $object)
                    {
                      if(strtolower($object->attribute) == 'name')
                        {
                          $attachments[$i]['is_attachment'] = true;
                          $attachments[$i]['name'] = $object->value;
                        }
                    }
                }
    
                if ($attachments[$i]['is_attachment'])
                {
                  $attachments[$i]['attachment'] = imap_fetchbody($imap, $m, $i+1);
                  if($structure->parts[$i]->encoding == 3)
                    { // 3 = BASE64
                        $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
                    }
                    elseif($structure->parts[$i]->encoding == 4)
                    { // 4 = QUOTED-PRINTABLE
                        $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
                    }
                }
            }
            foreach ($attachments as $i => $attachment)
            {
            $name = $attachment['name'];
            $contents = $attachment['attachment'];
            echo "Pièce jointe : " .$name. "<br />\n";
            echo "valeur key : " .$i. "<br />\n";    
            if($name)
                {file_put_contents($name,$contents);}
            }
        }
    }
        $check = imap_mailboxmsginfo($imap);
    echo "Nombre de messages avant effacement : " . $check->Nmsgs . "<br />\n";
    
        imap_close($imap);
    
    ?>
    Comme je l'avais indiqué, je suis loin de parler et d'écrire courament le PHP, il est fort probable que ce code puisse être optimisé. Si vous avez des idées n'hésitez pas à commenter et me donnez vos avis.
    Merci d'avance
    N'oubliez pas de passer vos post en "réglé" c'est très utile à celui qui cherche, ...et qui se perd http://forum.joomla.fr/announcement.php?f=133 mais trouvera grâce à vous

Annonce

Réduire
Aucune annonce pour le moment.

Partenaire de l'association

Réduire

Hébergeur Web PlanetHoster
Travaille ...
X