\'"]/', '', $str); $return = array(); if(preg_match('/[[:alnum:]\._\-]+@[[:alnum:]_\-\.]+/',$str, $matches1) && preg_match('/[[:alnum:]\._\-\ ]+/',$str, $matches2)){ return array( 'fullName' => mb_convert_encoding(str_replace($matches1[0],'', $str), "UTF8", "ISO_8859-1"), 'mailAddress' => $matches1[0] ); } else{ return array('mailAddress' => $str); } } private function loadLang($lang_user){ $fn = PHPGW_INCLUDE_ROOT."/expressoMail1_2/setup/phpgw_".$lang_user.'.lang'; if (file_exists($fn)){ $fp = fopen($fn,'r'); while ($data = fgets($fp,16000)){ list($message_id,$app_name,$null,$content) = explode("\t",substr($data,0,-1)); $_SESSION['phpgw_info']['expressomail']['lang'][$message_id] = $content; } fclose($fp); } } private function getImap(){ if($this->imap == null) { $boemailadmin = CreateObject('emailadmin.bo'); $emailadmin_profile = $boemailadmin->getProfileList(); $_SESSION['phpgw_info']['expressomail']['email_server'] = $boemailadmin->getProfile($emailadmin_profile[0]['profileID']); $preferences = $GLOBALS['phpgw']->preferences->read(); $_SESSION['phpgw_info']['user']['preferences']['expressoMail'] = $preferences['expressoMail']; $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['outoffice'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['outoffice']; $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['telephone_number'] = $GLOBALS['phpgw_info']['user']['telephonenumber']; $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_cache'] = $current_config['expressoMail_enable_cache']; $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_x_origin'] = $current_config['expressoMail_use_x_origin']; $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['number_of_contacts'] = $current_config['expressoMail_Number_of_dynamic_contacts'] ? $current_config['expressoMail_Number_of_dynamic_contacts'] : "0"; $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['notification_domains'] = $current_config['expressoMail_notification_domains']; $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['search_result_number'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['search_result_number'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['search_result_number'] : "50"; $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['search_characters_number'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['search_characters_number'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['search_characters_number'] : "4"; $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['max_attachment_size'] = $current_config['expressoMail_Max_attachment_size'] ? $current_config['expressoMail_Max_attachment_size']."M" : ''; $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['max_msg_size'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['max_msg_size'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['max_msg_size'] : "0"; $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['imap_max_folders'] = $current_config['expressoMail_imap_max_folders']; $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['max_email_per_page'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['max_email_per_page'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['max_email_per_page'] : "50"; $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['extended_info'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['extended_info']?$_SESSION['phpgw_info']['user']['preferences']['expressoMail']['extended_info'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['extended_info']:'0'; $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['from_to_sent'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['from_to_sent'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['from_to_sent'] : "0"; $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['return_recipient_deafault'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['return_recipient_deafault'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['return_recipient_deafault'] : "0"; $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['quick_search_default'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['quick_search_default'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['quick_search_default'] : 1; $this->loadLang( $GLOBALS['phpgw_info']['user']['preferences']['common']['lang']); $_SESSION['phpgw_info']['expressomail']['user']['userid'] = $GLOBALS['phpgw_info']['user']['userid']; $_SESSION['phpgw_info']['expressomail']['user']['passwd'] = $GLOBALS['phpgw_info']['user']['passwd']; include_once(PHPGW_INCLUDE_ROOT."/expressoMail1_2/inc/class.imap_functions.inc.php"); $this->imap = new imap_functions(); if($this->defaultFolders == null) { $sent = empty($_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSentFolder']) ? $this->imap->functions->getLang("Sent") : $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSentFolder']; $spam = empty($_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSpamFolder']) ? $this->imap->functions->getLang("Spam"): $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSpamFolder']; $drafts = empty($_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultDraftsFolder']) ? $this->imap->functions->getLang("Drafts") : $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultDraftsFolder']; $trash = empty($_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultTrashFolder']) ? $this->imap->functions->getLang("Trash") : $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultTrashFolder']; $this->defaultFolders = array ( 'INBOX' => 0, 'INBOX'.$this->imap->imap_delimiter.$spam => 2, 'INBOX'.$this->imap->imap_delimiter.$sent => 1, 'INBOX'.$this->imap->imap_delimiter.$drafts => 4, 'INBOX'.$this->imap->imap_delimiter.$trash => 3 ); } } return $this->imap; } public function getUserFolders($params){ if($this->isLoggedIn($params)) { $imap_folders = $this->getImap()->get_folders_list(); } if(!$imap_folders){ return $this->getResponse(); } $all_folders = array(); $user_folders = array(); $shared_folders = array(); foreach ($imap_folders as $i => $imap_folder) { if(is_int($i)) { $folder = array(); $folder['folderName'] = mb_convert_encoding($imap_folder['folder_name'], "UTF8", "ISO_8859-1"); if($folder['folderName'] == 'INBOX') { $folder['folderName'] = $this->getImap()->functions->getLang("Inbox"); } $folder['folderParentID'] = mb_convert_encoding($imap_folder['folder_parent'],'UTF8','ISO-8859-1'); $folder['folderHasChildren'] = $imap_folder['folder_hasChildren']; $folder['qtdUnreadMessages'] = $imap_folder['folder_unseen']; $folder['qtdMessages'] = $this->getImap()->get_num_msgs(array("folder" => $imap_folder['folder_id'])); $folder['folderID'] = mb_convert_encoding($imap_folder['folder_id'],'UTF8','ISO-8859-1'); if(substr($folder['folderID'], 0, 4) == 'user'){ $folder['folderType'] = "6"; $shared_folders[] = $folder; }else if(array_key_exists($folder['folderID'], $this->defaultFolders) !== false) { $folder_type = $this->defaultFolders[$folder['folderID']]; $folder['folderType'] = $folder_type; $default_folders[] = $folder; } else{ $folder['folderType'] = "5"; $user_folders[] = $folder; } } } $all_folders = array_merge($default_folders, $user_folders, $shared_folders); $quota_folders = $this->getImap()->get_quota_folders(); $soma = 0; foreach($all_folders as $i => $folder){ $folder_name = mb_convert_encoding($folder['folderName'],"ISO_8859-1", "UTF8"); $folder_id = mb_convert_encoding($folder['folderID'],"ISO_8859-1", "UTF8"); if($folder_id == 'INBOX') { $j = $this->getImap()->functions->getLang("Inbox"); }else { $j = str_replace("INBOX".$this->getImap()->imap_delimiter,"",$folder_id); } $all_folders[$i]['diskSizeUsed'] = $quota_folders[$j]['quota_used']; $all_folders[$i]['diskSizePercent'] = $quota_folders[$j]['quota_percent']/100; $soma = $soma + $all_folders[$i]['diskSizePercent']; } $this->result = array ( 'debug' => $soma, 'folders' => $all_folders, 'diskSizeUsed' => $imap_folders['quota_used']*1024, 'diskSizeLimit' => $imap_folders['quota_limit']*1024, 'diskSizePercent' => $imap_folders['quota_percent']/100 ); return $this->getResponse(); } private function getMessage($params){ $params['folderID']; $params['msgID']; $msg_number = $params['msg_number']; $msg_folder = ($params['msg_folder']); $info_msg = $this -> getImap()-> get_info_msg( array( 'msg_folder' => urlencode($params['folderID']), 'msg_number' => $params['msgID'] )); $msg['msgID'] = $info_msg['msg_number']; $msg['folderID'] = $info_msg['msg_folder']; //$msg['msgDate'] = $info_msg['fulldate']; $msg['msgDate'] = $info_msg['msg_day']." ".$info_msg['msg_hour']; $msg['msgFrom']['fullName'] = $info_msg['from']['name']; $msg['msgFrom']['mailAddress'] = $info_msg['from']['email']; $msg['msgSender']['fullName'] = $info_msg['sender']['name']; $msg['msgSender']['mailAddress']= $info_msg['sender']['email']; $toaddresses = explode(",",$info_msg['toaddress2']); if(count($toaddresses) > 1) { foreach ($toaddresses as $i => $toaddress){ $msg['msgTo'][$i] = $this->formatMailObject($toaddress); } } else{ $msg['msgTo'][0] = $this->formatMailObject($info_msg['toaddress2']); } $ccaddresses = explode(",",$info_msg['cc']); if(count($ccaddresses) > 1) { foreach ($ccaddresses as $i => $ccaddress){ $msg['msgCC'][$i] = $this->formatMailObject($ccaddress); } } else{ $msg['msgCC'][0] = $this->formatMailObject($info_msg['cc']); } $msg['msgReplyTo'][0] = $this->formatMailObject($info_msg['reply_toaddress']); $msg['msgSubject'] = mb_convert_encoding($info_msg['subject'],"UTF8", "ISO_8859-1"); $msg['msgHasAttachments'] = $info_msg['attachments'] ? "1" : "0"; $msg['msgAttachments'] = $info_msg['attachments']; $msg['msgFlagged'] = $info_msg['Flagged'] == "F" ? "1" : "0"; $msg['msgForwarded']= $info_msg['Forwarded'] == "F" ? "1" : "0"; $msg['msgAnswered'] = $info_msg['Answered'] == "A" ? "1" : "0"; $msg['msgDraft'] = $info_msg['Draft'] == "X" ? "1" : "0"; $msg['msgSeen'] = $info_msg['Unseen'] == "U" ? "0" : "1"; $msg['msgSize'] = $info_msg['Size']; $msg['msgBody'] = $info_msg['body']; return $msg; } /* * TODO: Implementar método para carregar mensagens */ public function getUserMessages($params){ if($this->isLoggedIn($params)) { if($params['folderID'] && $params['msgID'] > 0) { $msg = $this->getMessage($params); $this->result = array ( 'messages' => array($msg)); return $this->getResponse(); } $max_email_per_page = intval($params['resultsPerPage'] ? $params['resultsPerPage'] : $this->getImap()->prefs['max_email_per_page']); $current_page = intval($params['page'] ? $params['page'] : 1); $msg_range_begin = ($max_email_per_page * ($current_page - 1)) + 1; $msg_range_end = $msg_range_begin + ($max_email_per_page - 1); $this->getImap()->prefs['preview_msg_subject'] = "1"; $imap_msgs = $this->getImap()-> get_range_msgs2( array( "folder" => $params['folderID'], "msg_range_begin" => $msg_range_begin, "msg_range_end" => $msg_range_end, "search_box_type" => "ALL", "sort_box_reverse" => "1", "sort_box_type" => "SORTARRIVAL" )); } if(!$imap_msgs){ return $this->getResponse(); } $all_msgs = array(); foreach($imap_msgs as $i => $imap_msg) { if(!is_int($i)) { continue; } $msg = array(); $msg['msgID'] = $imap_msg['msg_number']; $msg['folderID'] = $imap_msgs['folder']; $msg['msgDate'] = gmdate('d/m/Y H:i', $imap_msg['timestamp']); $msg['msgFrom']['fullName'] = $imap_msg['from']['name']; $msg['msgFrom']['mailAddress'] = $imap_msg['from']['email']; $msg['msgTo'][0]['fullName'] = $imap_msg['to']['name']; $msg['msgTo'][0]['mailAddress'] = $imap_msg['to']['email']; $msg['msgReplyTo'][0] = $this->formatMailObject($imap_msg['reply_toaddress']); $msg['msgSubject'] = mb_convert_encoding($imap_msg['subject'],"UTF8", "ISO_8859-1"); $msg['msgHasAttachments'] = $imap_msg['attachment'] ? "1" : "0"; $msg['msgFlagged'] = $imap_msg['Flagged'] == "F" ? "1" : "0"; $msg['msgForwarded']= $imap_msg['Forwarded'] == "F" ? "1" : "0"; $msg['msgAnswered'] = $imap_msg['Answered'] == "A" ? "1" : "0"; $msg['msgDraft'] = $imap_msg['Draft'] == "X" ? "1" : "0"; $msg['msgSeen'] = $imap_msg['Unseen'] == "U" ? "0" : "1"; $msg['ContentType'] = $imap_msg['ContentType']; $msg['msgSize'] = $imap_msg['Size']; $msg['msgBodyResume'] = $imap_msg['msg_sample']['body']; if($this->expressoVersion != "2.2") { $msg['msgBodyResume'] = base64_decode($msg['msgBodyResume']); } $msg['msgBodyResume'] = substr($msg['msgBodyResume'], 2); $msg['msgBodyResume'] = str_replace("\r\n", "", $msg['msgBodyResume']); $msg['msgBodyResume'] = str_replace(chr(160)," ", $msg['msgBodyResume']); $msg['msgBodyResume'] = preg_replace('/\s\s+/', '', $msg['msgBodyResume']); $msg['msgBodyResume'] = mb_convert_encoding($msg['msgBodyResume'],"UTF8", "ISO_8859-1"); $all_msgs[] = $msg; } $this->result = array ( 'messages' => $all_msgs, 'timeZone' => $imap_msgs['offsetToGMT'], 'totalUnseen' => $imap_msgs['tot_unseen'] ); return $this->getResponse(); } }