Ignore:
Timestamp:
06/16/09 18:29:16 (15 years ago)
Author:
rafaelraymundo
Message:

Ticket #550 - Unificação de funcionalidade do SERPRO referentes ao arquivamento local.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/expressoMail1_2/inc/class.imap_functions.inc.php

    r990 r1000  
    209209        * com .emls gerados pelo expresso, e o arquivo pode ser um zip contendo vários emls ou um .eml. 
    210210        */ 
     211/** 
     212        * Função que importa arquivos .eml exportados pelo expresso para a caixa do usuário. Testado apenas 
     213        * com .emls gerados pelo expresso, e o arquivo pode ser um zip contendo vários emls ou um .eml. 
     214        */ 
    211215        function import_msgs($params) { 
    212                 if(!$this->mbox)                 
     216                if(!$this->mbox) 
    213217                        $this->mbox = $this->open_mbox(); 
     218 
     219                if( preg_match('/local_/',$params["folder"]) ) 
     220                { 
     221 
     222                        $tmp_box = mb_convert_encoding('INBOX/Lixeira/tmpMoveToLocal', "UTF7-IMAP", "UTF-8"); 
     223                        if ( ! imap_createmailbox( $this -> mbox,"{".$this -> imap_server."}$tmp_box" ) ) 
     224                                return $this->functions->getLang( 'Import to Local : fail...' ); 
     225                        imap_reopen($this->mbox, "{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$tmp_box); 
     226                        $params["folder"] = $tmp_box; 
     227                } 
    214228                $errors = array(); 
    215229                $invalid_format = false; 
     
    218232                if((($quota['limit'] - $quota['usage'])*1024) <= $params['FILES'][0]['size']){ 
    219233                        return array( 'error' => $this->functions->getLang("fail in import:"). 
    220                                                         " ".$this->functions->getLang("Over quota"));            
     234                                                        " ".$this->functions->getLang("Over quota")); 
    221235                } 
    222236                if(substr($filename,strlen($filename)-4)==".zip") { 
     
    225239                        if ($zip) { 
    226240                                while ($zip_entry = zip_read($zip)) { 
    227                                          
     241 
    228242                                        if (zip_entry_open($zip, $zip_entry, "r")) { 
    229243                                                $email = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); 
     
    239253                                zip_close($zip); 
    240254                        } 
     255 
     256                        if ( isset( $tmp_box ) && ! sizeof( $errors ) ) 
     257                        { 
     258 
     259                                $mc = imap_check($this->mbox); 
     260 
     261                                $result = imap_fetch_overview( $this -> mbox, "1:{$mc -> Nmsgs}", 0 ); 
     262 
     263                                $ids = array( ); 
     264                                foreach ($result as $overview) 
     265                                        $ids[ ] = $overview -> uid; 
     266 
     267                                return implode( ',', $ids ); 
     268                        } 
    241269                        } 
    242270                else if(substr($filename,strlen($filename)-4)==".eml") { 
     
    251279                        } 
    252280                } 
    253                 else  
    254                 { 
     281                else 
     282                { 
     283                        if ( isset( $tmp_box ) ) 
     284                                imap_deletemailbox( $this->mbox,"{".$this -> imap_server."}$tmp_box" ); 
     285 
    255286                        return array("error" => $this->functions->getLang("wrong file format")); 
    256287                        $invalid_format = true; 
    257288                } 
    258                  
     289 
    259290                if(!$invalid_format) { 
    260291                        if(count($errors)>0) { 
     
    266297                        } 
    267298                        else 
    268                                 return $this->functions->getLang("The import was executed successfully.");                       
    269                 } 
    270         }        
    271         /* 
     299                                return $this->functions->getLang("The import was executed successfully."); 
     300                } 
     301        } 
     302        /* 
    272303                Remove os anexos de uma mensagem. A estratégia para isso é criar uma mensagem nova sem os anexos, mantendo apenas 
    273304                a primeira parte do e-mail, que é o texto, sem anexos. 
     
    28512882                return $header; 
    28522883        } 
     2884 
     2885//Por Bruno Costa(bruno.vieira-costa@serpro.gov.br - Insere emails no imap a partir do fonte do mesmo. Se o argumento timestamp for passado ele utiliza do script python 
     2886///expressoMail1_2/imap.py para inserir uma msg com o horário correto pois isso não é porssível com a função imap_append do php. 
     2887 
     2888    function insert_email($source,$folder,$timestamp){ 
     2889        $username = $_SESSION['phpgw_info']['expressomail']['user']['userid']; 
     2890        $password = $_SESSION['phpgw_info']['expressomail']['user']['passwd']; 
     2891        $imap_server = $_SESSION['phpgw_info']['expressomail']['email_server']['imapServer']; 
     2892        $imap_port      = $_SESSION['phpgw_info']['expressomail']['email_server']['imapPort']; 
     2893        $imap_options = '/notls/novalidate-cert'; 
     2894        $mbox_stream = imap_open("{".$imap_server.":".$imap_port.$imap_options."}".$folder, $username, $password); 
     2895        if(imap_last_error()) 
     2896        { 
     2897            imap_createmailbox($mbox_stream,imap_utf7_encode("{".$imap_server."}".$folder)); 
     2898       } 
     2899        if($timestamp){ 
     2900            $tempDir = ini_get("session.save_path"); 
     2901            $file = $tempDir."imap_".md5(microtime()); 
     2902                $f = fopen($file,"w"); 
     2903                fputs($f,base64_encode($source)); 
     2904            fclose($f); 
     2905            $command = "python ".$_SERVER['DOCUMENT_ROOT']."expressoMail1_2/imap.py ".$imap_server." ".$imap_port." ".$username." ".$password." ".$timestamp." ".$folder." ".$file; 
     2906            $return['command']=exec($command); 
     2907        }else{ 
     2908            $return['append'] = imap_append($mbox_stream, "{".$imap_server.":".$imap_port."}".$folder, $source, "\\Seen"); 
     2909        } 
     2910        $status = imap_status($mbox_stream, "{".$this->imap_server.":".$this->imap_port."}".$folder, SA_UIDNEXT); 
     2911        $return['msg_no'] = $status->uidnext - 1; 
     2912                $return['error'] = imap_last_error(); 
     2913        if($mbox_stream) 
     2914                        imap_close($mbox_stream); 
     2915        return $return; 
     2916 
     2917    } 
     2918 
     2919//Por Bruno Costa(bruno.vieira-costa@serpro.gov.br - Trata fontes de emails enviados via POST para o servidor por um xmlhttprequest, as partes codificados com 
     2920//Base64 os "+" são substituidos por " " no envio e essa função arruma esse efeito. 
     2921 
     2922    function treat_base64_from_post($source){ 
     2923            $offset = 0; 
     2924            do 
     2925            { 
     2926                    if($inicio = strpos($source, 'Content-Transfer-Encoding: base64', $offset)) 
     2927                    { 
     2928                            $inicio = strpos($source, "\n\r", $inicio); 
     2929                            $fim = strpos($source, '--', $inicio); 
     2930                            if(!$fim) 
     2931                                    $fim = strpos($source,"\n\r", $inicio); 
     2932                            $length = $fim-$inicio; 
     2933                            $parte = substr( $source,$inicio,$length-1); 
     2934                            $parte = str_replace(" ", "+", $parte); 
     2935                            $source = substr_replace($source, $parte, $inicio, $length-1); 
     2936                    } 
     2937                    if($offset > $inicio) 
     2938                    $offset=FALSE; 
     2939                    else 
     2940                    $offset = $inicio; 
     2941            } 
     2942            while($offset); 
     2943            return $source; 
     2944    } 
     2945 
     2946//Por Bruno Costa(bruno.vieira-costa@serpro.gov.br - Recebe os fontes dos emails a serem desarquivados, separa e envia cada um para função insert_mail. 
     2947 
     2948    function unarchive_mail($params) 
     2949    { 
     2950        $dest_folder = $params['folder']; 
     2951        $sources = explode("#@#@#@",$params['source']); 
     2952        $timestamps = explode("#@#@#@",$params['timestamp']); 
     2953        foreach($sources as $index=>$src) { 
     2954                        if($src!=""){ 
     2955                                $source = $this->treat_base64_from_post($src); 
     2956                                $insert = $this->insert_email($source,$dest_folder,$timestamps[$index]); 
     2957                        } 
     2958                } 
     2959        return $insert; 
     2960    } 
     2961 
     2962    function download_all_local_attachments($params) 
     2963    { 
     2964        $source = $params['source']; 
     2965        $source = $this->treat_base64_from_post($source); 
     2966        $insert = $this->insert_email($source,'INBOX'.$this->imap_delimiter.'decifradas'); 
     2967        $exporteml = new ExportEml(); 
     2968        $params['num_msg']=$insert['msg_no']; 
     2969        $params['folder']='INBOX'.$this->imap_delimiter.'decifradas'; 
     2970        return $exporteml->download_all_attachments($params); 
     2971    } 
    28532972} 
    28542973?> 
Note: See TracChangeset for help on using the changeset viewer.