Changeset 4022


Ignore:
Timestamp:
04/14/11 09:17:29 (9 years ago)
Author:
roberto.santosjunior
Message:

Ticket #1751 - Lentidão na abertura da caixa dentro do ExpressoMail?

File:
1 edited

Legend:

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

    r4014 r4022  
    100100        function get_range_msgs2($params) 
    101101        { 
    102                 // Free others requests  
    103                 session_write_close();  
    104102                $folder = $params['folder']; 
    105103                $msg_range_begin = $params['msg_range_begin']; 
     
    111109                if(!$this->mbox || !is_resource($this->mbox)) 
    112110                        $this->mbox = $this->open_mbox($folder); 
     111 
     112                $return = array(); 
    113113                 
    114                 $return = array(); 
    115                 //Para enviar o offset entre o timezone definido pelo usuário e GMT 
    116                 $return['offsetToGMT'] = $this->functions->CalculateDateOffset(); 
    117                  
    118                 //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  
    120                 //a contagem de mensagens não lidas e do total de mensagens 
    121                 /* 
    122                  if(!$search_box_type || $search_box_type=="UNSEEN" || $search_box_type=="SEEN") { 
    123                         $msgs_info = imap_status($this->mbox,"{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$folder,SA_ALL); 
    124                         $return['tot_unseen'] = $search_box_type == "SEEN" ? 0 : $msgs_info->unseen; 
     114                if(!$search_box_type || $search_box_type=="UNSEEN" || $search_box_type=="SEEN") { 
     115                        $msgs_info = imap_mailboxmsginfo($this->mbox);           
     116 
     117 
     118                        $return['tot_unseen'] = $search_box_type == "SEEN" ? 0 : $msgs_info->Unread; 
     119 
    125120                        $sort_array_msg = $this-> get_msgs($folder, $sort_box_type, $search_box_type, $sort_box_reverse,$msg_range_begin,$msg_range_end); 
    126                         $num_msgs = ($search_box_type=="UNSEEN") ? $msgs_info->unseen : (($search_box_type=="SEEN") ? ($msgs_info->messages - $msgs_info->unseen) : $msgs_info->messages); 
     121 
     122                        $num_msgs = ($search_box_type=="UNSEEN") ? $msgs_info->Unread : (($search_box_type=="SEEN") ? ($msgs_info->Nmsgs - $msgs_info->Unread) : $msgs_info->Nmsgs); 
    127123 
    128124                        $i = 0; 
     
    141137                } 
    142138                else { 
    143                 * */ 
    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; 
     139                        $num_msgs = imap_num_msg($this->mbox);   
     140                        $sort_array_msg = $this-> get_msgs($folder, $sort_box_type, $search_box_type, $sort_box_reverse,$msg_range_begin,$num_msgs); 
     141 
     142 
     143                        $return['tot_unseen'] = 0; 
     144                        $i = 0;          
     145 
     146                        if(is_array($sort_array_msg)){ 
     147                                foreach($sort_array_msg as $msg_number => $value) 
     148                                { 
     149                                        $temp = $this->get_info_head_msg($msg_number); 
     150                                        if(!$temp) 
     151                                                return false; 
     152                                 
     153                                        if($temp['Unseen'] == 'U' || $temp['Recent'] == 'N'){ 
     154                                                $return['tot_unseen']++; 
     155                                        } 
     156                                 
     157                                        if($i <= ($msg_range_end-$msg_range_begin)) 
     158                                                $return[$i] = $temp; 
     159                                        $i++; 
     160                                } 
     161                        } 
     162                        $return['num_msgs'] = count($sort_array_msg)+($msg_range_begin-1); 
     163 
     164                } 
     165                return $return; 
    175166        } 
    176167 
     
    182173                //if ($this->prefs['use_important_flag'] ) 
    183174                //{ 
    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 
     175                        /*Como eu preciso do atributo Importance para saber se o email é 
     176                         * importante ou não, uso abaixo a função imap_fetchheader e busco 
     177                         * o atributo importance nela. Isso faz com que eu acesse o cabeçalho 
    187178                         * 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. 
     179                         * não preciso reimplementar o método utilizando o fetchheader. 
     180                         * Como as mensagens são renderizadas em um número pequeno por vez, 
     181                         * não parece ter perda considerável de performance. 
    191182                         */ 
    192183 
     
    194185                        $flag = preg_match('/importance *: *(.*)\r/i', $tempHeader, $importance); 
    195186                //} 
    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> 
     187                // Reimplementado código para identificação dos e-mails assinados e cifrados 
     188                // no método getMessageType(). Mário César Kolling <mario.kolling@serpro.gov.br> 
    198189                $head_array['ContentType'] = $this->getMessageType($msg_number, $tempHeader); 
    199190                $head_array['Importance'] = $flag==0?"Normal":$importance[1]; 
     
    242233                $to = $header->to; 
    243234                $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. 
     235                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. 
    245236                        $head_array['to']['name'] = $head_array['to']['email'] = NULL; 
    246237                } 
     
    316307        } 
    317308        /** 
    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. 
     309        * Função que importa arquivos .eml exportados pelo expresso para a caixa do usuário. Testado apenas 
     310        * com .emls gerados pelo expresso, e o arquivo pode ser um zip contendo vários emls ou um .eml. 
    320311        */ 
    321312        function import_msgs($params) { 
     
    408399        } 
    409400        /* 
    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. 
     401                Remove os anexos de uma mensagem. A estratégia para isso é criar uma mensagem nova sem os anexos, mantendo apenas 
     402                a primeira parte do e-mail, que é o texto, sem anexos. 
     403                O método considera que o email é multpart. 
    413404        */ 
    414405        function remove_attachments($params) { 
     
    420411 
    421412                $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. 
     413                foreach($headertemp as $head) {//Se eu colocar todo o header do email dá pau no append, então procuro apenas o que interessa. 
    423414                        $head1 = explode(":",$head); 
    424415                        if ( (strtoupper($head1[0]) == "TO") || 
     
    430421 
    431422                $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*/ 
     423                $msg->fetch_structure($params["msg_num"]);/* O fetchbody tava trazendo o email com problemas na acentuação. 
     424                                                             Então uso essa classe para verificar a codificação e o charset, 
     425                                                             para que o método decodeBody do expresso possa trazer tudo certinho*/ 
    435426 
    436427                $all_body_type = strtolower($msg->file_type[$params["msg_num"]][0]); 
     
    468459                                                        $all_body_encoding, $all_body_charset 
    469460                                                        ) 
    470                                         ), "\\Seen"); //Append do novo email, só com header e conteúdo sem anexos. 
     461                                        ), "\\Seen"); //Append do novo email, só com header e conteúdo sem anexos. 
    471462 
    472463                if(!$status) 
     
    537528                        $msg_info = $this->get_info_msg($new_params); 
    538529 
    539                         $this->mbox = $this->open_mbox($params['folder']); //Não sei porque, mas se não abrir de novo a caixa dá erro. 
     530                        $this->mbox = $this->open_mbox($params['folder']); //Não sei porque, mas se não abrir de novo a caixa dá erro. 
    540531                        $msg_info['header'] = $this->get_info_head_msg($msg_number); 
    541532 
     
    13431334                $body = $this-> replace_links($body); 
    13441335 
    1345                 //Remoção de tags <span></span> para correção de erro no firefox  
     1336                //Remoção de tags <span></span> para correção de erro no firefox  
    13461337                $body = mb_eregi_replace("<span><span>","",$body);  
    13471338                $body = mb_eregi_replace("</span></span>","",$body);  
    1348                 //Correção para compatibilização com Outlook, ao visualizar a mensagem  
     1339                //Correção para compatibilização com Outlook, ao visualizar a mensagem  
    13491340                $body = mb_ereg_replace('<!--\[','<!-- [',$body);  
    13501341                $body = mb_ereg_replace('&lt;!\[endif\]--&gt;', '<![endif]-->', $body); 
     
    14041395                 */  
    14051396 
    1406                 // PHP 5.2.x - Remover assim que possível  
     1397                // PHP 5.2.x - Remover assim que possível  
    14071398                $body = preg_replace_callback( $pattern,  
    14081399                        create_function(  
     
    15101501                            $this->db = new db_functions(); 
    15111502                             
    1512                             // TODO: testar se existe um certificado no banco e verificar qual ï¿œ o mais atual. 
     1503                            // TODO: testar se existe um certificado no banco e verificar qual ï¿œ o mais atual. 
    15131504                            if(!$certificado->dados['EXPIRADO'] && !$certificado->dados['REVOGADO'] && count($certificado->erros_ssl) < 1) 
    15141505                                $this->db->insert_certificate(strtolower($certificado->dados['EMAIL']), $certificado->cert_assinante, $certificado->dados['SERIALNUMBER'], $certificado->dados['AUTHORITYKEYIDENTIFIER']); 
     
    16251616                foreach($msgs_to_exec as $msg_number) 
    16261617                { 
    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 
     1618                        /*A função imap_headerinfo não traz o cabeçalho completo, e sim alguns 
     1619                        * atributos do cabeçalho. Como eu preciso do atributo Importance 
     1620                        * para saber se o email é importante ou não, uso abaixo a função 
    16301621                        * 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 
     1622                        * para as funções ajax. Isso faz com que eu acesse o cabeçalho 
    16321623                        * duas vezes e de duas formas diferentes, mas em contrapartida, eu 
    1633                         * não preciso reimplementar o método utilizando o fetchheader. 
     1624                        * não preciso reimplementar o método utilizando o fetchheader. 
    16341625                        */ 
    16351626     
     
    17191710 
    17201711     /** 
    1721      * Método que faz a verificação do Content-Type do e-mail e verifica se é um e-mail normal, 
     1712     * Método que faz a verificação do Content-Type do e-mail e verifica se é um e-mail normal, 
    17221713     * 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 
     1714     * @author Mário César Kolling <mario.kolling@serpro.gov.br> 
     1715     * @param $headers Uma String contendo os Headers do e-mail retornados pela função imap_imap_fetchheader 
     1716     * @param $msg_number O número da mesagem 
    17261717     * @return Retorna o tipo da mensagem (normal, signature, cipher). 
    17271718     */ 
     
    17451736     * Metodo que retorna todas as pastas do usuario logado. 
    17461737     * @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, 
     1738     * Se usar $params['noSharedFolders'] = true, ira retornar todas as pastas do usuário logado, 
    17481739     * 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 
     1740     * Se usar $params['folderType'] = "default" irá retornar somente as pastas defaults 
     1741     * Se usar $params['folderType'] = "personal" irá retornar somente as pastas pessoais 
     1742     * Se usar $params['folderType'] = null irá retornar todas as pastas 
    17521743     * @return Retorna um array contendo as seguintes informacoes de cada pasta: folder_unseen, 
    17531744     * folder_id, folder_name, folder_parent e folder_hasChildren. 
     
    20772068        { 
    20782069            $body = $params['body']; 
    2079             //Compatibilização com Outlook, ao encaminhar a mensagem 
     2070            //Compatibilização com Outlook, ao encaminhar a mensagem 
    20802071            $body = mb_ereg_replace('<!--\[','<!-- [',$body); 
    20812072        } 
     
    34063397        function remove_accents($string) { 
    34073398                return strtr($string, 
    3408                 "?Ó??ó?Ý?úÁÀÃÂÄÇÉÈÊËÍÌ?ÎÏÑÕÔÓÒÖÚÙ?ÛÜ?áàãâÀçéÚêëíì?îïñóòõÎöúù?ûÌÜÿ", 
     3399                "?Ó??ó?Ý?úÁÀÃÂÄÇÉÈÊËÍÌ?ÎÏÑÕÔÓÒÖÚÙ?ÛÜ?áàãâäçéèêëíì?îïñóòõôöúù?ûüýÿ", 
    34093400                "SOZsozYYuAAAAACEEEEIIIIINOOOOOUUUUUsaaaaaceeeeiiiiinooooouuuuuyy"); 
    34103401        } 
     
    38713862 
    38723863//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. 
     3864///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. 
    38743865 
    38753866    function insert_email($source,$folder,$timestamp,$flags){ 
     
    39273918        if (version_compare(PHP_VERSION, '5.2.0', '>=')){ 
    39283919            if(!$source = base64_decode($source,true)) 
    3929                 return "error ".$source."Espaços ".$i; 
     3920                return "error ".$source."Espaços ".$i; 
    39303921 
    39313922        } 
    39323923        else { 
    39333924            if(!$source = base64_decode($source)) 
    3934                 return "error ".$source."Espaços ".$i; 
     3925                return "error ".$source."Espaços ".$i; 
    39353926        } 
    39363927 
     
    39683959 
    39693960//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. 
     3961//Base64 os "+" são substituidos por " " no envio e essa função arruma esse efeito. 
    39713962 
    39723963    function treat_base64_from_post($source){ 
     
    39943985    } 
    39953986 
    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. 
     3987//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. 
    39973988 
    39983989    function unarchive_mail($params) 
Note: See TracChangeset for help on using the changeset viewer.