Ignore:
Timestamp:
10/05/12 12:55:44 (12 years ago)
Author:
marcosw
Message:

Ticket #3088 - Correção no desarquivamento de mensagens locais com anexo

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sandbox/2.5.0-expresso1/expressoMail1_2/inc/class.imap_functions.inc.php

    r7331 r7352  
    46124612 
    46134613    function insert_email($source,$folder,$timestamp,$flags){ 
    4614                  
     4614 
    46154615        $username = $_SESSION['phpgw_info']['expressomail']['user']['userid']; 
    46164616        $password = $_SESSION['phpgw_info']['expressomail']['user']['passwd']; 
     
    46194619        $imap_options = '/notls/novalidate-cert'; 
    46204620 
    4621          
    46224621        $folder = mb_convert_encoding( $folder, "UTF7-IMAP","ISO-8859-1"); 
    4623  
    46244622        $mbox_stream = imap_open("{".$imap_server.":".$imap_port.$imap_options."}".$folder, $username, $password); 
    46254623         
    46264624        if(imap_last_error() === 'Mailbox already exists') 
    46274625            imap_createmailbox($mbox_stream,imap_utf7_encode("{".$imap_server."}".$folder)); 
     4626 
    46284627        if($timestamp){ 
    4629                         $pdate = date_parse(date('r')); // pega a data atual do servidor (TODO: pegar a data da mensagem local)  
    4630                         $timestamp += $pdate['zone']*(60); //converte a data da mensagem para o fuso horário GMT 0. Isto é feito devido ao Expresso Mail armazenar a data no fuso horário GMT 0 e para exibi-la converte ela para o fuso horário local.  
    4631                         /* TODO: o diretorio /tmp deve ser substituido pelo diretorio temporario configurado no setup */  
    4632                         $file = "/tmp/sess_".$_SESSION[ 'phpgw_session' ][ 'session_id' ];  
    4633                  
    4634                 $f = fopen($file,"w"); 
    4635                 fputs($f,base64_encode($source)); 
    4636             fclose($f); 
    4637             $command = "python ".dirname(__FILE__)."/../imap.py \"$imap_server\" \"$imap_port\" \"$username\" \"$password\" \"$timestamp\" \"$folder\" \"$file\""; 
    4638             $return['command']= exec($command); 
     4628            if(version_compare(PHP_VERSION, '5.3.2', '>=')){ 
     4629                $return['append'] = imap_append($mbox_stream, "{".$imap_server.":".$imap_port."}".mb_convert_encoding($folder, "UTF7-IMAP","ISO_8859-1"), $source,'',date('d-M-Y H:i:s O',$timestamp)); 
     4630            }else{ 
     4631                                $pdate = date_parse(date('r')); // pega a data atual do servidor (TODO: pegar a data da mensagem local)  
     4632                                $timestamp += $pdate['zone']*(60); //converte a data da mensagem para o fuso horário GMT 0. Isto é feito devido ao Expresso Mail armazenar a data no fuso horário GMT 0 e para exibi-la converte ela para o fuso horário local.  
     4633                                /* TODO: o diretorio /tmp deve ser substituido pelo diretorio temporario configurado no setup */  
     4634                                $file = "/tmp/sess_".$_SESSION[ 'phpgw_session' ][ 'session_id' ];  
     4635                         
     4636                        $f = fopen($file,"w"); 
     4637                        fputs($f,base64_encode($source)); 
     4638                    fclose($f); 
     4639                    $command = "python ".dirname(__FILE__)."/../imap.py \"$imap_server\" \"$imap_port\" \"$username\" \"$password\" \"$timestamp\" \"$folder\" \"$file\""; 
     4640                    $return['command']= exec($command); 
     4641                } 
    46394642        }else{ 
    46404643            $return['append'] = imap_append($mbox_stream, "{".$imap_server.":".$imap_port."}".$folder, $source, "\\Seen"); 
    46414644        } 
     4645 
     4646        if (!empty($return['command'])) 
     4647        { 
     4648            list ($result, $msg) = explode(':',$return['command']); 
     4649            if (strtoupper($result) === 'NO') 
     4650            { 
     4651                $return['error'] = $msg; 
     4652                return $return; 
     4653            } 
     4654        } 
     4655 
    46424656        $status = imap_status($mbox_stream, "{".$this->imap_server.":".$this->imap_port."}".$folder, SA_UIDNEXT); 
    46434657                         
     
    46654679                            $flags_fixed.="\\Answered \\Draft "; 
    46664680                        imap_setflag_full($mbox_stream, $return['msg_no'], $flags_fixed, ST_UID); 
    4667         } 
     4681                } 
    46684682         
    46694683        //Ignorando erro de AUTH=Plain 
     
    47304744 
    47314745    function treat_base64_from_post($source){ 
    4732             $offset = 0; 
    4733             do 
     4746        //Marcosw inicio - Necessário alterar a forma com que é tratada a quebra de linha do fonte da mensagem, caso contrário a mensagem não será desarquivada. 
     4747        $source = preg_replace('/(?<!\r)\n/', "\r\n", $source); 
     4748        //Marcosw fim 
     4749 
     4750        $offset = 0; 
     4751        do 
     4752        { 
     4753            if($inicio = strpos($source, 'Content-Transfer-Encoding: base64', $offset)) 
    47344754            { 
    4735                     if($inicio = strpos($source, 'Content-Transfer-Encoding: base64', $offset)) 
    4736                     { 
    4737                             $inicio = strpos($source, "\n\r", $inicio); 
    4738                             $fim = strpos($source, '--', $inicio); 
    4739                             if(!$fim) 
    4740                                     $fim = strpos($source,"\n\r", $inicio); 
    4741                             $length = $fim-$inicio; 
    4742                             $parte = substr( $source,$inicio,$length-1); 
    4743                             $parte = str_replace(" ", "+", $parte); 
    4744                             $source = substr_replace($source, $parte, $inicio, $length-1); 
    4745                     } 
    4746                     if($offset > $inicio) 
    4747                     $offset=FALSE; 
    4748                     else 
    4749                     $offset = $inicio; 
     4755                    $inicio = strpos($source, "\n\r", $inicio); 
     4756                    $fim = strpos($source, '--', $inicio); 
     4757                    if(!$fim) 
     4758                            $fim = strpos($source,"\n\r", $inicio); 
     4759                    $length = $fim-$inicio; 
     4760                    $parte = substr( $source,$inicio,$length-1); 
     4761                    $parte = str_replace(" ", "+", $parte); 
     4762                    $source = substr_replace($source, $parte, $inicio, $length-1); 
    47504763            } 
    4751             while($offset); 
    4752             return $source; 
     4764            if($offset > $inicio) 
     4765            $offset=FALSE; 
     4766            else 
     4767            $offset = $inicio; 
     4768        } 
     4769        while($offset); 
     4770        return $source; 
    47534771    } 
    47544772 
     
    47794797 
    47804798                                $source = $this->treat_base64_from_post($sourcedec); 
     4799 
    47814800                                $insert = $this->insert_email($source,$dest_folder,$timestamps[$index],$flags[$index]); 
    47824801 
Note: See TracChangeset for help on using the changeset viewer.