Ignore:
Timestamp:
04/13/11 15:58:11 (13 years ago)
Author:
alexandrecorreia
Message:

Ticket #1751 - Correcao para a lentidao na abertura das mailboxes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2/expressoMail1_2/inc/class.imap_functions.inc.php

    r3955 r4014  
    117117                 
    118118                //Condição comentada devido a um problema na função imap_status que não retorna valores exatos para pastas  
    119                 //acentuadas e tambem pela não necessidade de se tratar mensagens lidas ou não lidas das demais, em relação  
     119                //acentuadas e tambem pela não necessidade de se tratar mensagens lidas ou não lidas das demais, em relação  
    120120                //a contagem de mensagens não lidas e do total de mensagens 
    121121                /* 
    122122                 if(!$search_box_type || $search_box_type=="UNSEEN" || $search_box_type=="SEEN") { 
    123123                        $msgs_info = imap_status($this->mbox,"{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$folder,SA_ALL); 
    124  
    125  
    126124                        $return['tot_unseen'] = $search_box_type == "SEEN" ? 0 : $msgs_info->unseen; 
    127  
    128125                        $sort_array_msg = $this-> get_msgs($folder, $sort_box_type, $search_box_type, $sort_box_reverse,$msg_range_begin,$msg_range_end); 
    129  
    130126                        $num_msgs = ($search_box_type=="UNSEEN") ? $msgs_info->unseen : (($search_box_type=="SEEN") ? ($msgs_info->messages - $msgs_info->unseen) : $msgs_info->messages); 
    131127 
     
    146142                else { 
    147143                * */ 
    148                         $num_msgs = imap_num_msg($this->mbox);   
    149                         $sort_array_msg = $this-> get_msgs($folder, $sort_box_type, $search_box_type, $sort_box_reverse,$msg_range_begin,$num_msgs); 
    150  
    151  
    152                         $return['tot_unseen'] = 0; 
    153                         $i = 0;          
    154  
    155                         if(is_array($sort_array_msg)){ 
    156                                 foreach($sort_array_msg as $msg_number => $value) 
    157                                 { 
    158                                         $temp = $this->get_info_head_msg($msg_number); 
    159                                         if(!$temp) 
    160                                                 return false; 
    161                                  
    162                                         if($temp['Unseen'] == 'U' || $temp['Recent'] == 'N'){ 
    163                                                 $return['tot_unseen']++; 
    164                                         } 
    165                                  
    166                                         if($i <= ($msg_range_end-$msg_range_begin)) 
    167                                                 $return[$i] = $temp; 
    168                                         $i++; 
    169                                 } 
    170                         } 
    171                         $return['num_msgs'] = count($sort_array_msg)+($msg_range_begin-1); 
    172  
    173                 //} 
    174                 return $return; 
     144                $msgs_info      = imap_status( $this->mbox,"{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$folder,SA_ALL ); 
     145                $num_msgs       = imap_num_msg($this->mbox); 
     146        $sort_array_msg = $this->get_msgs( $folder, $sort_box_type, $search_box_type, $sort_box_reverse, $msg_range_begin, $msg_range_end ); 
     147        $return['tot_unseen'] = ( $search_box_type == "SEEN" ) ? 0 : $msgs_info->unseen; 
     148         
     149        $i = 0;          
     150 
     151        if( is_array($sort_array_msg) ) 
     152        { 
     153            foreach($sort_array_msg as $msg_number => $value) 
     154            { 
     155                $temp = $this->get_info_head_msg($msg_number); 
     156                 
     157                if(!$temp) 
     158                    return false; 
     159 
     160                if($temp['Unseen'] == 'U' || $temp['Recent'] == 'N') 
     161                { 
     162                    $return['tot_unseen']++; 
     163                } 
     164 
     165                if($i <= ($msg_range_end-$msg_range_begin)) 
     166                    $return[$i] = $temp; 
     167                 
     168                $i++; 
     169            } 
     170        } 
     171         
     172        $return['num_msgs'] = $num_msgs; 
     173 
     174        return $return; 
    175175        } 
    176176 
     
    182182                //if ($this->prefs['use_important_flag'] ) 
    183183                //{ 
    184                         /*Como eu preciso do atributo Importance para saber se o email é 
    185                          * importante ou não, uso abaixo a função imap_fetchheader e busco 
    186                          * o atributo importance nela. Isso faz com que eu acesse o cabeçalho 
     184                        /*Como eu preciso do atributo Importance para saber se o email é 
     185                         * importante ou não, uso abaixo a função imap_fetchheader e busco 
     186                         * o atributo importance nela. Isso faz com que eu acesse o cabeçalho 
    187187                         * duas vezes e de duas formas diferentes, mas em contrapartida, eu 
    188                          * não preciso reimplementar o método utilizando o fetchheader. 
    189                          * Como as mensagens são renderizadas em um número pequeno por vez, 
    190                          * não parece ter perda considerável de performance. 
     188                         * não preciso reimplementar o método utilizando o fetchheader. 
     189                         * Como as mensagens são renderizadas em um número pequeno por vez, 
     190                         * não parece ter perda considerável de performance. 
    191191                         */ 
    192192 
     
    194194                        $flag = preg_match('/importance *: *(.*)\r/i', $tempHeader, $importance); 
    195195                //} 
    196                 // Reimplementado código para identificação dos e-mails assinados e cifrados 
    197                 // no método getMessageType(). Mário César Kolling <mario.kolling@serpro.gov.br> 
     196                // Reimplementado código para identificação dos e-mails assinados e cifrados 
     197                // no método getMessageType(). Mário César Kolling <mario.kolling@serpro.gov.br> 
    198198                $head_array['ContentType'] = $this->getMessageType($msg_number, $tempHeader); 
    199199                $head_array['Importance'] = $flag==0?"Normal":$importance[1]; 
     
    242242                $to = $header->to; 
    243243                $head_array['to'] = array(); 
    244                 if($to[1] && $to[1]->host == ".SYNTAX-ERROR.") { //E-mails que não possuem o campo "para", vêm com o recipiente preenchido, porém com um recipiente a mais alegando erro de sintaxe. 
     244                if($to[1] && $to[1]->host == ".SYNTAX-ERROR.") { //E-mails que não possuem o campo "para", vêm com o recipiente preenchido, porém com um recipiente a mais alegando erro de sintaxe. 
    245245                        $head_array['to']['name'] = $head_array['to']['email'] = NULL; 
    246246                } 
     
    316316        } 
    317317        /** 
    318         * Função que importa arquivos .eml exportados pelo expresso para a caixa do usuário. Testado apenas 
    319         * com .emls gerados pelo expresso, e o arquivo pode ser um zip contendo vários emls ou um .eml. 
     318        * Função que importa arquivos .eml exportados pelo expresso para a caixa do usuário. Testado apenas 
     319        * com .emls gerados pelo expresso, e o arquivo pode ser um zip contendo vários emls ou um .eml. 
    320320        */ 
    321321        function import_msgs($params) { 
     
    408408        } 
    409409        /* 
    410                 Remove os anexos de uma mensagem. A estratégia para isso é criar uma mensagem nova sem os anexos, mantendo apenas 
    411                 a primeira parte do e-mail, que é o texto, sem anexos. 
    412                 O método considera que o email é multpart. 
     410                Remove os anexos de uma mensagem. A estratégia para isso é criar uma mensagem nova sem os anexos, mantendo apenas 
     411                a primeira parte do e-mail, que é o texto, sem anexos. 
     412                O método considera que o email é multpart. 
    413413        */ 
    414414        function remove_attachments($params) { 
     
    420420 
    421421                $headertemp = explode("\n",imap_fetchheader($this->mbox, imap_msgno($this->mbox, $params["msg_num"]))); 
    422                 foreach($headertemp as $head) {//Se eu colocar todo o header do email dá pau no append, então procuro apenas o que interessa. 
     422                foreach($headertemp as $head) {//Se eu colocar todo o header do email dá pau no append, então procuro apenas o que interessa. 
    423423                        $head1 = explode(":",$head); 
    424424                        if ( (strtoupper($head1[0]) == "TO") || 
     
    430430 
    431431                $msg = &new message_components($this->mbox); 
    432                 $msg->fetch_structure($params["msg_num"]);/* O fetchbody tava trazendo o email com problemas na acentuação. 
    433                                                              Então uso essa classe para verificar a codificação e o charset, 
    434                                                              para que o método decodeBody do expresso possa trazer tudo certinho*/ 
     432                $msg->fetch_structure($params["msg_num"]);/* O fetchbody tava trazendo o email com problemas na acentuação. 
     433                                                             Então uso essa classe para verificar a codificação e o charset, 
     434                                                             para que o método decodeBody do expresso possa trazer tudo certinho*/ 
    435435 
    436436                $all_body_type = strtolower($msg->file_type[$params["msg_num"]][0]); 
     
    468468                                                        $all_body_encoding, $all_body_charset 
    469469                                                        ) 
    470                                         ), "\\Seen"); //Append do novo email, só com header e conteúdo sem anexos. 
     470                                        ), "\\Seen"); //Append do novo email, só com header e conteúdo sem anexos. 
    471471 
    472472                if(!$status) 
     
    537537                        $msg_info = $this->get_info_msg($new_params); 
    538538 
    539                         $this->mbox = $this->open_mbox($params['folder']); //Não sei porque, mas se não abrir de novo a caixa dá erro. 
     539                        $this->mbox = $this->open_mbox($params['folder']); //Não sei porque, mas se não abrir de novo a caixa dá erro. 
    540540                        $msg_info['header'] = $this->get_info_head_msg($msg_number); 
    541541 
     
    13431343                $body = $this-> replace_links($body); 
    13441344 
    1345                 //Remoção de tags <span></span> para correção de erro no firefox  
     1345                //Remoção de tags <span></span> para correção de erro no firefox  
    13461346                $body = mb_eregi_replace("<span><span>","",$body);  
    13471347                $body = mb_eregi_replace("</span></span>","",$body);  
    1348                 //Correção para compatibilização com Outlook, ao visualizar a mensagem  
     1348                //Correção para compatibilização com Outlook, ao visualizar a mensagem  
    13491349                $body = mb_ereg_replace('<!--\[','<!-- [',$body);  
    13501350                $body = mb_ereg_replace('&lt;!\[endif\]--&gt;', '<![endif]-->', $body); 
     
    14041404                 */  
    14051405 
    1406                 // PHP 5.2.x - Remover assim que possível  
     1406                // PHP 5.2.x - Remover assim que possível  
    14071407                $body = preg_replace_callback( $pattern,  
    14081408                        create_function(  
     
    15101510                            $this->db = new db_functions(); 
    15111511                             
    1512                             // TODO: testar se existe um certificado no banco e verificar qual ï¿œ o mais atual. 
     1512                            // TODO: testar se existe um certificado no banco e verificar qual ï¿œ o mais atual. 
    15131513                            if(!$certificado->dados['EXPIRADO'] && !$certificado->dados['REVOGADO'] && count($certificado->erros_ssl) < 1) 
    15141514                                $this->db->insert_certificate(strtolower($certificado->dados['EMAIL']), $certificado->cert_assinante, $certificado->dados['SERIALNUMBER'], $certificado->dados['AUTHORITYKEYIDENTIFIER']); 
     
    16251625                foreach($msgs_to_exec as $msg_number) 
    16261626                { 
    1627                         /*A função imap_headerinfo não traz o cabeçalho completo, e sim alguns 
    1628                         * atributos do cabeçalho. Como eu preciso do atributo Importance 
    1629                         * para saber se o email é importante ou não, uso abaixo a função 
     1627                        /*A função imap_headerinfo não traz o cabeçalho completo, e sim alguns 
     1628                        * atributos do cabeçalho. Como eu preciso do atributo Importance 
     1629                        * para saber se o email é importante ou não, uso abaixo a função 
    16301630                        * imap_fetchheader e busco o atributo importance nela para passar 
    1631                         * para as funções ajax. Isso faz com que eu acesse o cabeçalho 
     1631                        * para as funções ajax. Isso faz com que eu acesse o cabeçalho 
    16321632                        * duas vezes e de duas formas diferentes, mas em contrapartida, eu 
    1633                         * não preciso reimplementar o método utilizando o fetchheader. 
     1633                        * não preciso reimplementar o método utilizando o fetchheader. 
    16341634                        */ 
    16351635     
     
    17191719 
    17201720     /** 
    1721      * Método que faz a verificação do Content-Type do e-mail e verifica se é um e-mail normal, 
     1721     * Método que faz a verificação do Content-Type do e-mail e verifica se é um e-mail normal, 
    17221722     * assinado ou cifrado. 
    1723      * @author Mário César Kolling <mario.kolling@serpro.gov.br> 
    1724      * @param $headers Uma String contendo os Headers do e-mail retornados pela função imap_imap_fetchheader 
    1725      * @param $msg_number O número da mesagem 
     1723     * @author Mário César Kolling <mario.kolling@serpro.gov.br> 
     1724     * @param $headers Uma String contendo os Headers do e-mail retornados pela função imap_imap_fetchheader 
     1725     * @param $msg_number O número da mesagem 
    17261726     * @return Retorna o tipo da mensagem (normal, signature, cipher). 
    17271727     */ 
     
    17451745     * Metodo que retorna todas as pastas do usuario logado. 
    17461746     * @param $params array opcional para repassar os argumentos ao metodo. 
    1747      * Se usar $params['noSharedFolders'] = true, ira retornar todas as pastas do usuário logado, 
     1747     * Se usar $params['noSharedFolders'] = true, ira retornar todas as pastas do usuário logado, 
    17481748     * excluindo as compartilhadas para ele. 
    1749      * Se usar $params['folderType'] = "default" irá retornar somente as pastas defaults 
    1750      * Se usar $params['folderType'] = "personal" irá retornar somente as pastas pessoais 
    1751      * Se usar $params['folderType'] = null irá retornar todas as pastas 
     1749     * Se usar $params['folderType'] = "default" irá retornar somente as pastas defaults 
     1750     * Se usar $params['folderType'] = "personal" irá retornar somente as pastas pessoais 
     1751     * Se usar $params['folderType'] = null irá retornar todas as pastas 
    17521752     * @return Retorna um array contendo as seguintes informacoes de cada pasta: folder_unseen, 
    17531753     * folder_id, folder_name, folder_parent e folder_hasChildren. 
     
    20772077        { 
    20782078            $body = $params['body']; 
    2079             //Compatibilização com Outlook, ao encaminhar a mensagem 
     2079            //Compatibilização com Outlook, ao encaminhar a mensagem 
    20802080            $body = mb_ereg_replace('<!--\[','<!-- [',$body); 
    20812081        } 
     
    34063406        function remove_accents($string) { 
    34073407                return strtr($string, 
    3408                 "?Ó??ó?Ý?úÁÀÃÂÄÇÉÈÊËÍÌ?ÎÏÑÕÔÓÒÖÚÙ?ÛÜ?áàãâäçéèêëíì?îïñóòõôöúù?ûüýÿ", 
     3408                "?Ó??ó?Ý?úÁÀÃÂÄÇÉÈÊËÍÌ?ÎÏÑÕÔÓÒÖÚÙ?ÛÜ?áàãâÀçéÚêëíì?îïñóòõÎöúù?ûÌÜÿ", 
    34093409                "SOZsozYYuAAAAACEEEEIIIIINOOOOOUUUUUsaaaaaceeeeiiiiinooooouuuuuyy"); 
    34103410        } 
     
    38713871 
    38723872//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 
    3873 ///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. 
     3873///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. 
    38743874 
    38753875    function insert_email($source,$folder,$timestamp,$flags){ 
     
    39273927        if (version_compare(PHP_VERSION, '5.2.0', '>=')){ 
    39283928            if(!$source = base64_decode($source,true)) 
    3929                 return "error ".$source."Espaços ".$i; 
     3929                return "error ".$source."Espaços ".$i; 
    39303930 
    39313931        } 
    39323932        else { 
    39333933            if(!$source = base64_decode($source)) 
    3934                 return "error ".$source."Espaços ".$i; 
     3934                return "error ".$source."Espaços ".$i; 
    39353935        } 
    39363936 
     
    39683968 
    39693969//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 
    3970 //Base64 os "+" são substituidos por " " no envio e essa função arruma esse efeito. 
     3970//Base64 os "+" são substituidos por " " no envio e essa função arruma esse efeito. 
    39713971 
    39723972    function treat_base64_from_post($source){ 
     
    39943994    } 
    39953995 
    3996 //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. 
     3996//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. 
    39973997 
    39983998    function unarchive_mail($params) 
Note: See TracChangeset for help on using the changeset viewer.