Changeset 4022
- Timestamp:
- 04/14/11 09:17:29 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2/expressoMail1_2/inc/class.imap_functions.inc.php
r4014 r4022 100 100 function get_range_msgs2($params) 101 101 { 102 // Free others requests103 session_write_close();104 102 $folder = $params['folder']; 105 103 $msg_range_begin = $params['msg_range_begin']; … … 111 109 if(!$this->mbox || !is_resource($this->mbox)) 112 110 $this->mbox = $this->open_mbox($folder); 111 112 $return = array(); 113 113 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 125 120 $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); 127 123 128 124 $i = 0; … … 141 137 } 142 138 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; 175 166 } 176 167 … … 182 173 //if ($this->prefs['use_important_flag'] ) 183 174 //{ 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 busco186 * o atributo importance nela. Isso faz com que eu acesse o cabe çalho175 /*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 187 178 * 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. 191 182 */ 192 183 … … 194 185 $flag = preg_match('/importance *: *(.*)\r/i', $tempHeader, $importance); 195 186 //} 196 // Reimplementado c ódigo para identificação dos e-mails assinados e cifrados197 // 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> 198 189 $head_array['ContentType'] = $this->getMessageType($msg_number, $tempHeader); 199 190 $head_array['Importance'] = $flag==0?"Normal":$importance[1]; … … 242 233 $to = $header->to; 243 234 $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. 245 236 $head_array['to']['name'] = $head_array['to']['email'] = NULL; 246 237 } … … 316 307 } 317 308 /** 318 * Fun ção que importa arquivos .eml exportados pelo expresso para a caixa do usuário. Testado apenas319 * 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. 320 311 */ 321 312 function import_msgs($params) { … … 408 399 } 409 400 /* 410 Remove os anexos de uma mensagem. A estrat égia para isso écriar uma mensagem nova sem os anexos, mantendo apenas411 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. 413 404 */ 414 405 function remove_attachments($params) { … … 420 411 421 412 $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. 423 414 $head1 = explode(":",$head); 424 415 if ( (strtoupper($head1[0]) == "TO") || … … 430 421 431 422 $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*/ 435 426 436 427 $all_body_type = strtolower($msg->file_type[$params["msg_num"]][0]); … … 468 459 $all_body_encoding, $all_body_charset 469 460 ) 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. 471 462 472 463 if(!$status) … … 537 528 $msg_info = $this->get_info_msg($new_params); 538 529 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. 540 531 $msg_info['header'] = $this->get_info_head_msg($msg_number); 541 532 … … 1343 1334 $body = $this-> replace_links($body); 1344 1335 1345 //Remo ção de tags <span></span> para correção de erro no firefox1336 //Remoção de tags <span></span> para correção de erro no firefox 1346 1337 $body = mb_eregi_replace("<span><span>","",$body); 1347 1338 $body = mb_eregi_replace("</span></span>","",$body); 1348 //Corre ção para compatibilização com Outlook, ao visualizar a mensagem1339 //Correção para compatibilização com Outlook, ao visualizar a mensagem 1349 1340 $body = mb_ereg_replace('<!--\[','<!-- [',$body); 1350 1341 $body = mb_ereg_replace('<!\[endif\]-->', '<![endif]-->', $body); … … 1404 1395 */ 1405 1396 1406 // PHP 5.2.x - Remover assim que poss Ãvel1397 // PHP 5.2.x - Remover assim que possível 1407 1398 $body = preg_replace_callback( $pattern, 1408 1399 create_function( … … 1510 1501 $this->db = new db_functions(); 1511 1502 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. 1513 1504 if(!$certificado->dados['EXPIRADO'] && !$certificado->dados['REVOGADO'] && count($certificado->erros_ssl) < 1) 1514 1505 $this->db->insert_certificate(strtolower($certificado->dados['EMAIL']), $certificado->cert_assinante, $certificado->dados['SERIALNUMBER'], $certificado->dados['AUTHORITYKEYIDENTIFIER']); … … 1625 1616 foreach($msgs_to_exec as $msg_number) 1626 1617 { 1627 /*A fun ção imap_headerinfo não traz o cabeçalho completo, e sim alguns1628 * atributos do cabe çalho. Como eu preciso do atributo Importance1629 * para saber se o email é importante ou não, uso abaixo a função1618 /*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 1630 1621 * imap_fetchheader e busco o atributo importance nela para passar 1631 * para as fun ções ajax. Isso faz com que eu acesse o cabeçalho1622 * para as funções ajax. Isso faz com que eu acesse o cabeçalho 1632 1623 * 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. 1634 1625 */ 1635 1626 … … 1719 1710 1720 1711 /** 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, 1722 1713 * 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_fetchheader1725 * @param $msg_number O n úmero da mesagem1714 * @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 1726 1717 * @return Retorna o tipo da mensagem (normal, signature, cipher). 1727 1718 */ … … 1745 1736 * Metodo que retorna todas as pastas do usuario logado. 1746 1737 * @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, 1748 1739 * excluindo as compartilhadas para ele. 1749 * Se usar $params['folderType'] = "default" ir áretornar somente as pastas defaults1750 * Se usar $params['folderType'] = "personal" ir áretornar somente as pastas pessoais1751 * Se usar $params['folderType'] = null ir áretornar todas as pastas1740 * 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 1752 1743 * @return Retorna um array contendo as seguintes informacoes de cada pasta: folder_unseen, 1753 1744 * folder_id, folder_name, folder_parent e folder_hasChildren. … … 2077 2068 { 2078 2069 $body = $params['body']; 2079 //Compatibiliza ção com Outlook, ao encaminhar a mensagem2070 //Compatibilização com Outlook, ao encaminhar a mensagem 2080 2071 $body = mb_ereg_replace('<!--\[','<!-- [',$body); 2081 2072 } … … 3406 3397 function remove_accents($string) { 3407 3398 return strtr($string, 3408 "? Ã??ó?Ã?úÃÃÃÃÃÃÃÃÃÃÃÃ?ÃÃÃÃÃÃÃÃÃÃ?ÃÃ?áà ãâÀçéÚêëÃì?îïñóòõÎöúù?ûÌÜÿ",3399 "?Ó??ó?Ý?úÁÀÃÂÄÇÉÈÊËÍÌ?ÎÏÑÕÔÓÒÖÚÙ?ÛÜ?áàãâäçéèêëíì?îïñóòõôöúù?ûüýÿ", 3409 3400 "SOZsozYYuAAAAACEEEEIIIIINOOOOOUUUUUsaaaaaceeeeiiiiinooooouuuuuyy"); 3410 3401 } … … 3871 3862 3872 3863 //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. 3874 3865 3875 3866 function insert_email($source,$folder,$timestamp,$flags){ … … 3927 3918 if (version_compare(PHP_VERSION, '5.2.0', '>=')){ 3928 3919 if(!$source = base64_decode($source,true)) 3929 return "error ".$source."Espa ços ".$i;3920 return "error ".$source."Espaços ".$i; 3930 3921 3931 3922 } 3932 3923 else { 3933 3924 if(!$source = base64_decode($source)) 3934 return "error ".$source."Espa ços ".$i;3925 return "error ".$source."Espaços ".$i; 3935 3926 } 3936 3927 … … 3968 3959 3969 3960 //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. 3971 3962 3972 3963 function treat_base64_from_post($source){ … … 3994 3985 } 3995 3986 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. 3997 3988 3998 3989 function unarchive_mail($params)
Note: See TracChangeset
for help on using the changeset viewer.