Changeset 79449 in spip-zone


Ignore:
Timestamp:
Dec 18, 2013, 5:48:44 PM (6 years ago)
Author:
severo@…
Message:

Nouvelles fonctions imap_save_attachments et imap_save_attachment.

Elles viennent de la copie et du réarrangement de la méthode
receiveMail->GetAttach? du fichier receivemail.class.php

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/imap/imap_fonctions.php

    r79447 r79449  
    22
    33/*
    4  * Ouvrir un flux IMAP vers la boîte aux lettres définie dans la
    5  * configuration
     4 * Ouvrir un flux IMAP vers la boîte aux lettres définie dans la configuration
     5 *
     6 * @return flux_IMAP Flux imap vers la boîte aux lettres ouverte
    67 */
    78function imap_open_from_configuration() {
     
    1819        return @imap_open($connexion, $email, $email_pwd);
    1920}
     21
     22/*
     23 * Sauvegarder les pièces jointes sur le disque
     24 *
     25 * @param flux_IMAP $mbox Un flux IMAP ouvert par imap_open()
     26 * @param int $mid L'indice du mail à traiter
     27 * @param string $path Le répertoire où sauver les pièces jointes
     28 * @param array $allowed_types Types de pièces jointes autorisés. Par défaut tous les types sont autorisés (liste vide). Voir http://www.php.net/manual/fr/function.imap-fetchstructure.php pour la liste des types
     29 *
     30 * @return array Liste des noms de fichiers sauvegardés dans $path
     31 */
     32function imap_save_attachments($mbox, $mid, $path, $allowed_types=array()) {
     33        if(!$mbox)
     34                return false;
     35
     36        $pieces_jointes = array();
     37        $structure = imap_fetchstructure($mbox, $mid);
     38        if(isset($structure->parts)) {
     39                foreach($structure->parts as $key => $value) {
     40                        $enc = $structure->parts[$key]->encoding;
     41                        if((isset($structure->parts[$key]->ifdparameters)
     42                                        AND $structure->parts[$key]->ifdparameters)
     43                                        AND ((isset($structure->parts[$key]->subtype) AND in_array($structure->parts[$key]->subtype, $allowed_types)) OR count($allowed_types) == 0)) {
     44                                $name = $structure->parts[$key]->dparameters[0]->value;
     45                                imap_save_attachment($mbox, $mid, $key+1, $enc, $path, $name);
     46                                $pieces_jointes[] = $name;
     47                        }
     48                        // Support for embedded attachments starts here
     49                        if(isset($structure->parts[$key]->parts)
     50                                        AND ((isset($structure->parts[$key]->subtype) AND in_array($structure->parts[$key]->subtype, $allowed_types)) OR count($allowed_types) == 0)) {
     51                                foreach($structure->parts[$key]->parts as $keyb => $valueb) {
     52                                        $enc=$structure->parts[$key]->parts[$keyb]->encoding;
     53                                        if($structure->parts[$key]->parts[$keyb]->ifdparameters) {
     54                                                $name=$structure->parts[$key]->parts[$keyb]->dparameters[0]->value;
     55                                                $partnro = ($key+1).".".($keyb+1);
     56                                                imap_save_attachment($mbox, $mid, $partnro, $enc, $path, $name);
     57                                                $pieces_jointes[] = $name;
     58                                        }
     59                                }
     60                        }
     61                }
     62        }
     63        return $pieces_jointes;
     64}
     65
     66/*
     67 * Fonction interne - écrit une pièce jointe sur le disque
     68 *
     69 * @param flux_IMAP $mbox Un flux IMAP ouvert par imap_open()
     70 * @param int $mid L'indice du mail à traiter
     71 * @param int $attid L'indice de la pièce jointe dans le mail
     72 * @param int $enc L'encodage de la pièce jointe (voir http://www.php.net/manual/fr/function.imap-fetchstructure.php pour la liste des encodages)
     73 * @param string $path Le répertoire où sauvegarder la pièce jointe
     74 * @param string $name Le nom du fichier sous lequel sera sauvegardée la pièce jointe
     75 *
     76 * @return void
     77 */
     78function imap_save_attachment($mbox, $mid, $attid, $enc, $path, $name) {
     79        $message = imap_fetchbody($mbox,$mid,$attid);
     80        if ($enc == 0)
     81                $message = imap_8bit($message);
     82        if ($enc == 1)
     83                $message = imap_8bit ($message);
     84        if ($enc == 2)
     85                $message = imap_binary ($message);
     86        if ($enc == 3)
     87                $message = imap_base64 ($message);
     88        if ($enc == 4)
     89                $message = quoted_printable_decode($message);
     90        if ($enc == 5)
     91                $message = $message;
     92        $fp=fopen($path.$name,"w");
     93        fwrite($fp,$message);
     94        fclose($fp);
     95}
Note: See TracChangeset for help on using the changeset viewer.