Changeset 1000 for trunk/expressoMail1_2/inc/class.imap_functions.inc.php
- Timestamp:
- 06/16/09 18:29:16 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/expressoMail1_2/inc/class.imap_functions.inc.php
r990 r1000 209 209 * com .emls gerados pelo expresso, e o arquivo pode ser um zip contendo vários emls ou um .eml. 210 210 */ 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 */ 211 215 function import_msgs($params) { 212 if(!$this->mbox) 216 if(!$this->mbox) 213 217 $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 } 214 228 $errors = array(); 215 229 $invalid_format = false; … … 218 232 if((($quota['limit'] - $quota['usage'])*1024) <= $params['FILES'][0]['size']){ 219 233 return array( 'error' => $this->functions->getLang("fail in import:"). 220 " ".$this->functions->getLang("Over quota")); 234 " ".$this->functions->getLang("Over quota")); 221 235 } 222 236 if(substr($filename,strlen($filename)-4)==".zip") { … … 225 239 if ($zip) { 226 240 while ($zip_entry = zip_read($zip)) { 227 241 228 242 if (zip_entry_open($zip, $zip_entry, "r")) { 229 243 $email = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); … … 239 253 zip_close($zip); 240 254 } 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 } 241 269 } 242 270 else if(substr($filename,strlen($filename)-4)==".eml") { … … 251 279 } 252 280 } 253 else 254 { 281 else 282 { 283 if ( isset( $tmp_box ) ) 284 imap_deletemailbox( $this->mbox,"{".$this -> imap_server."}$tmp_box" ); 285 255 286 return array("error" => $this->functions->getLang("wrong file format")); 256 287 $invalid_format = true; 257 288 } 258 289 259 290 if(!$invalid_format) { 260 291 if(count($errors)>0) { … … 266 297 } 267 298 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 /* 272 303 Remove os anexos de uma mensagem. A estratégia para isso é criar uma mensagem nova sem os anexos, mantendo apenas 273 304 a primeira parte do e-mail, que é o texto, sem anexos. … … 2851 2882 return $header; 2852 2883 } 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 } 2853 2972 } 2854 2973 ?>
Note: See TracChangeset
for help on using the changeset viewer.