[5595] | 1 | <?php |
---|
| 2 | |
---|
| 3 | include_once("Expresso.php"); |
---|
| 4 | |
---|
| 5 | class Mail extends Expresso { |
---|
| 6 | var $defaultFolders; |
---|
| 7 | var $imap; |
---|
| 8 | |
---|
| 9 | private function formatMailObject($str) { |
---|
| 10 | $str = html_entity_decode($str); |
---|
| 11 | $str = preg_replace('/[<>\'"]/', '', $str); |
---|
| 12 | $return = array(); |
---|
| 13 | if(preg_match('/[[:alnum:]\._\-]+@[[:alnum:]_\-\.]+/',$str, $matches1) && |
---|
| 14 | preg_match('/[[:alnum:]\._\-\ ]+/',$str, $matches2)){ |
---|
| 15 | return array( |
---|
| 16 | 'fullName' => mb_convert_encoding(str_replace($matches1[0],'', $str), "UTF8", "ISO_8859-1"), |
---|
| 17 | 'mailAddress' => $matches1[0] |
---|
| 18 | ); |
---|
| 19 | } |
---|
| 20 | else{ |
---|
| 21 | return array('mailAddress' => $str); |
---|
| 22 | } |
---|
| 23 | } |
---|
| 24 | |
---|
| 25 | private function loadLang($lang_user){ |
---|
| 26 | $fn = PHPGW_INCLUDE_ROOT."/expressoMail1_2/setup/phpgw_".$lang_user.'.lang'; |
---|
| 27 | if (file_exists($fn)){ |
---|
| 28 | $fp = fopen($fn,'r'); |
---|
| 29 | while ($data = fgets($fp,16000)){ |
---|
| 30 | list($message_id,$app_name,$null,$content) = explode("\t",substr($data,0,-1)); |
---|
| 31 | $_SESSION['phpgw_info']['expressomail']['lang'][$message_id] = $content; |
---|
| 32 | } |
---|
| 33 | fclose($fp); |
---|
| 34 | } |
---|
| 35 | } |
---|
| 36 | |
---|
| 37 | |
---|
| 38 | private function getImap(){ |
---|
| 39 | if($this->imap == null) { |
---|
| 40 | $boemailadmin = CreateObject('emailadmin.bo'); |
---|
| 41 | $emailadmin_profile = $boemailadmin->getProfileList(); |
---|
| 42 | $_SESSION['phpgw_info']['expressomail']['email_server'] = $boemailadmin->getProfile($emailadmin_profile[0]['profileID']); |
---|
| 43 | |
---|
| 44 | $preferences = $GLOBALS['phpgw']->preferences->read(); |
---|
| 45 | $_SESSION['phpgw_info']['user']['preferences']['expressoMail'] = $preferences['expressoMail']; |
---|
| 46 | $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['outoffice'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['outoffice']; |
---|
| 47 | $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['telephone_number'] = $GLOBALS['phpgw_info']['user']['telephonenumber']; |
---|
| 48 | $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_cache'] = $current_config['expressoMail_enable_cache']; |
---|
| 49 | $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_x_origin'] = $current_config['expressoMail_use_x_origin']; |
---|
| 50 | $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['number_of_contacts'] = $current_config['expressoMail_Number_of_dynamic_contacts'] ? $current_config['expressoMail_Number_of_dynamic_contacts'] : "0"; |
---|
| 51 | $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['notification_domains'] = $current_config['expressoMail_notification_domains']; |
---|
| 52 | $_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"; |
---|
| 53 | $_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"; |
---|
| 54 | $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['max_attachment_size'] = $current_config['expressoMail_Max_attachment_size'] ? $current_config['expressoMail_Max_attachment_size']."M" : ''; |
---|
| 55 | $_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"; |
---|
| 56 | $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['imap_max_folders'] = $current_config['expressoMail_imap_max_folders']; |
---|
| 57 | $_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"; |
---|
| 58 | $_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'; |
---|
| 59 | $_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"; |
---|
| 60 | $_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"; |
---|
| 61 | $_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; |
---|
| 62 | |
---|
| 63 | |
---|
| 64 | $this->loadLang( $GLOBALS['phpgw_info']['user']['preferences']['common']['lang']); |
---|
| 65 | $_SESSION['phpgw_info']['expressomail']['user']['userid'] = $GLOBALS['phpgw_info']['user']['userid']; |
---|
| 66 | $_SESSION['phpgw_info']['expressomail']['user']['passwd'] = $GLOBALS['phpgw_info']['user']['passwd']; |
---|
| 67 | include_once(PHPGW_INCLUDE_ROOT."/expressoMail1_2/inc/class.imap_functions.inc.php"); |
---|
| 68 | $this->imap = new imap_functions(); |
---|
| 69 | |
---|
| 70 | if($this->defaultFolders == null) { |
---|
| 71 | $sent = empty($_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSentFolder']) ? |
---|
| 72 | $this->imap->functions->getLang("Sent") : $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSentFolder']; |
---|
| 73 | $spam = empty($_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSpamFolder']) ? |
---|
| 74 | $this->imap->functions->getLang("Spam"): $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSpamFolder']; |
---|
| 75 | $drafts = empty($_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultDraftsFolder']) ? |
---|
| 76 | $this->imap->functions->getLang("Drafts") : $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultDraftsFolder']; |
---|
| 77 | $trash = empty($_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultTrashFolder']) ? |
---|
| 78 | $this->imap->functions->getLang("Trash") : $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultTrashFolder']; |
---|
| 79 | |
---|
| 80 | $this->defaultFolders = array ( |
---|
| 81 | 'INBOX' => 0, |
---|
| 82 | 'INBOX'.$this->imap->imap_delimiter.$spam => 2, |
---|
| 83 | 'INBOX'.$this->imap->imap_delimiter.$sent => 1, |
---|
| 84 | 'INBOX'.$this->imap->imap_delimiter.$drafts => 4, |
---|
| 85 | 'INBOX'.$this->imap->imap_delimiter.$trash => 3 |
---|
| 86 | ); |
---|
| 87 | } |
---|
| 88 | } |
---|
| 89 | |
---|
| 90 | return $this->imap; |
---|
| 91 | } |
---|
| 92 | |
---|
| 93 | public function getUserFolders($params){ |
---|
| 94 | if($this->isLoggedIn($params)) { |
---|
| 95 | $imap_folders = $this->getImap()->get_folders_list(); |
---|
| 96 | } |
---|
| 97 | if(!$imap_folders){ |
---|
| 98 | return $this->getResponse(); |
---|
| 99 | } |
---|
| 100 | |
---|
| 101 | $all_folders = array(); |
---|
| 102 | $user_folders = array(); |
---|
| 103 | $shared_folders = array(); |
---|
| 104 | |
---|
| 105 | foreach ($imap_folders as $i => $imap_folder) { |
---|
| 106 | if(is_int($i)) { |
---|
| 107 | $folder = array(); |
---|
| 108 | $folder['folderName'] = mb_convert_encoding($imap_folder['folder_name'], "UTF8", "ISO_8859-1"); |
---|
| 109 | if($folder['folderName'] == 'INBOX') { |
---|
| 110 | $folder['folderName'] = $this->getImap()->functions->getLang("Inbox"); |
---|
| 111 | } |
---|
| 112 | $folder['folderParentID'] = mb_convert_encoding($imap_folder['folder_parent'],'UTF8','ISO-8859-1'); |
---|
| 113 | $folder['folderHasChildren'] = $imap_folder['folder_hasChildren']; |
---|
| 114 | $folder['qtdUnreadMessages'] = $imap_folder['folder_unseen']; |
---|
| 115 | $folder['qtdMessages'] = $this->getImap()->get_num_msgs(array("folder" => $imap_folder['folder_id'])); |
---|
| 116 | $folder['folderID'] = mb_convert_encoding($imap_folder['folder_id'],'UTF8','ISO-8859-1'); |
---|
| 117 | |
---|
| 118 | if(substr($folder['folderID'], 0, 4) == 'user'){ |
---|
| 119 | $folder['folderType'] = "6"; |
---|
| 120 | $shared_folders[] = $folder; |
---|
| 121 | }else if(array_key_exists($folder['folderID'], $this->defaultFolders) !== false) { |
---|
| 122 | $folder_type = $this->defaultFolders[$folder['folderID']]; |
---|
| 123 | $folder['folderType'] = $folder_type; |
---|
| 124 | $default_folders[] = $folder; |
---|
| 125 | } |
---|
| 126 | else{ |
---|
| 127 | $folder['folderType'] = "5"; |
---|
| 128 | $user_folders[] = $folder; |
---|
| 129 | } |
---|
| 130 | } |
---|
| 131 | } |
---|
| 132 | |
---|
| 133 | $all_folders = array_merge($default_folders, $user_folders, $shared_folders); |
---|
| 134 | $quota_folders = $this->getImap()->get_quota_folders(); |
---|
[5668] | 135 | $search = $params['search'] ? mb_convert_encoding($params['search'],"ISO_8859-1", "UTF8") : null; |
---|
[5595] | 136 | foreach($all_folders as $i => $folder){ |
---|
| 137 | $folder_name = mb_convert_encoding($folder['folderName'],"ISO_8859-1", "UTF8"); |
---|
| 138 | $folder_id = mb_convert_encoding($folder['folderID'],"ISO_8859-1", "UTF8"); |
---|
| 139 | if($folder_id == 'INBOX') { |
---|
| 140 | $j = $this->getImap()->functions->getLang("Inbox"); |
---|
| 141 | }else { |
---|
| 142 | $j = str_replace("INBOX".$this->getImap()->imap_delimiter,"",$folder_id); |
---|
| 143 | } |
---|
| 144 | $all_folders[$i]['diskSizeUsed'] = $quota_folders[$j]['quota_used']; |
---|
| 145 | $all_folders[$i]['diskSizePercent'] = $quota_folders[$j]['quota_percent']/100; |
---|
[5668] | 146 | if($search != null && stristr($folder_name, $search) == null){ |
---|
| 147 | unset($all_folders[$i]); |
---|
| 148 | } |
---|
[5595] | 149 | } |
---|
| 150 | |
---|
| 151 | $this->result = array ( |
---|
[5668] | 152 | 'folders' => array_values($all_folders), |
---|
[5670] | 153 | 'diskSizeUsed' => $quota_folders['quota_root']['quota_used']*1024, |
---|
| 154 | 'diskSizeLimit' => $quota_folders['quota_root']['quota_limit']*1024, |
---|
| 155 | 'diskSizePercent' => $quota_folders['quota_root']['quota_percent']/100 |
---|
[5595] | 156 | ); |
---|
| 157 | |
---|
| 158 | return $this->getResponse(); |
---|
| 159 | } |
---|
| 160 | |
---|
| 161 | private function getMessage($params){ |
---|
| 162 | |
---|
| 163 | $params['folderID']; |
---|
| 164 | $params['msgID']; |
---|
| 165 | $msg_number = $params['msg_number']; |
---|
| 166 | $msg_folder = ($params['msg_folder']); |
---|
| 167 | |
---|
| 168 | $info_msg = $this -> getImap()-> get_info_msg( |
---|
| 169 | array( 'msg_folder' => urlencode($params['folderID']), |
---|
| 170 | 'msg_number' => $params['msgID'] |
---|
| 171 | )); |
---|
| 172 | |
---|
| 173 | $msg['msgID'] = $info_msg['msg_number']; |
---|
| 174 | $msg['folderID'] = $info_msg['msg_folder']; |
---|
| 175 | //$msg['msgDate'] = $info_msg['fulldate']; |
---|
| 176 | $msg['msgDate'] = $info_msg['msg_day']." ".$info_msg['msg_hour']; |
---|
| 177 | |
---|
| 178 | $msg['msgFrom']['fullName'] = $info_msg['from']['name']; |
---|
| 179 | $msg['msgFrom']['mailAddress'] = $info_msg['from']['email']; |
---|
| 180 | $msg['msgSender']['fullName'] = $info_msg['sender']['name']; |
---|
| 181 | $msg['msgSender']['mailAddress']= $info_msg['sender']['email']; |
---|
| 182 | |
---|
| 183 | $toaddresses = explode(",",$info_msg['toaddress2']); |
---|
| 184 | if(count($toaddresses) > 1) { |
---|
| 185 | foreach ($toaddresses as $i => $toaddress){ |
---|
| 186 | $msg['msgTo'][$i] = $this->formatMailObject($toaddress); |
---|
| 187 | } |
---|
| 188 | } |
---|
| 189 | else{ |
---|
| 190 | $msg['msgTo'][0] = $this->formatMailObject($info_msg['toaddress2']); |
---|
| 191 | } |
---|
| 192 | |
---|
| 193 | $ccaddresses = explode(",",$info_msg['cc']); |
---|
| 194 | if(count($ccaddresses) > 1) { |
---|
| 195 | foreach ($ccaddresses as $i => $ccaddress){ |
---|
| 196 | $msg['msgCC'][$i] = $this->formatMailObject($ccaddress); |
---|
| 197 | } |
---|
| 198 | } |
---|
| 199 | else{ |
---|
| 200 | $msg['msgCC'][0] = $this->formatMailObject($info_msg['cc']); |
---|
| 201 | } |
---|
| 202 | |
---|
| 203 | |
---|
| 204 | $msg['msgReplyTo'][0] = $this->formatMailObject($info_msg['reply_toaddress']); |
---|
| 205 | $msg['msgSubject'] = mb_convert_encoding($info_msg['subject'],"UTF8", "ISO_8859-1"); |
---|
| 206 | $msg['msgHasAttachments'] = $info_msg['attachments'] ? "1" : "0"; |
---|
| 207 | $msg['msgAttachments'] = $info_msg['attachments']; |
---|
| 208 | $msg['msgFlagged'] = $info_msg['Flagged'] == "F" ? "1" : "0"; |
---|
| 209 | $msg['msgForwarded']= $info_msg['Forwarded'] == "F" ? "1" : "0"; |
---|
| 210 | $msg['msgAnswered'] = $info_msg['Answered'] == "A" ? "1" : "0"; |
---|
| 211 | $msg['msgDraft'] = $info_msg['Draft'] == "X" ? "1" : "0"; |
---|
| 212 | $msg['msgSeen'] = $info_msg['Unseen'] == "U" ? "0" : "1"; |
---|
| 213 | $msg['msgSize'] = $info_msg['Size']; |
---|
| 214 | $msg['msgBody'] = $info_msg['body']; |
---|
| 215 | |
---|
| 216 | return $msg; |
---|
| 217 | } |
---|
| 218 | /* |
---|
| 219 | * TODO: Implementar método para carregar mensagens |
---|
| 220 | */ |
---|
| 221 | public function getUserMessages($params){ |
---|
| 222 | |
---|
| 223 | if($this->isLoggedIn($params)) { |
---|
| 224 | |
---|
| 225 | if($params['folderID'] && $params['msgID'] > 0) { |
---|
| 226 | $msg = $this->getMessage($params); |
---|
| 227 | $this->result = array ( 'messages' => array($msg)); |
---|
| 228 | return $this->getResponse(); |
---|
| 229 | } |
---|
| 230 | |
---|
| 231 | $max_email_per_page = intval($params['resultsPerPage'] ? $params['resultsPerPage'] : |
---|
| 232 | $this->getImap()->prefs['max_email_per_page']); |
---|
| 233 | |
---|
| 234 | $current_page = intval($params['page'] ? $params['page'] : 1); |
---|
| 235 | |
---|
| 236 | $msg_range_begin = ($max_email_per_page * ($current_page - 1)) + 1; |
---|
| 237 | $msg_range_end = $msg_range_begin + ($max_email_per_page - 1); |
---|
| 238 | |
---|
| 239 | $this->getImap()->prefs['preview_msg_subject'] = "1"; |
---|
| 240 | |
---|
| 241 | |
---|
| 242 | $imap_msgs = $this->getImap()-> get_range_msgs2( |
---|
| 243 | array( "folder" => $params['folderID'], |
---|
| 244 | "msg_range_begin" => $msg_range_begin, |
---|
| 245 | "msg_range_end" => $msg_range_end, |
---|
| 246 | "search_box_type" => "ALL", |
---|
| 247 | "sort_box_reverse" => "1", |
---|
| 248 | "sort_box_type" => "SORTARRIVAL" |
---|
| 249 | )); |
---|
| 250 | } |
---|
| 251 | if(!$imap_msgs){ |
---|
| 252 | return $this->getResponse(); |
---|
| 253 | } |
---|
| 254 | |
---|
| 255 | $all_msgs = array(); |
---|
| 256 | |
---|
| 257 | foreach($imap_msgs as $i => $imap_msg) { |
---|
| 258 | if(!is_int($i)) { |
---|
| 259 | continue; |
---|
| 260 | } |
---|
| 261 | $msg = array(); |
---|
| 262 | $msg['msgID'] = $imap_msg['msg_number']; |
---|
| 263 | $msg['folderID'] = $imap_msgs['folder']; |
---|
| 264 | $msg['msgDate'] = gmdate('d/m/Y H:i', $imap_msg['timestamp']); |
---|
| 265 | $msg['msgFrom']['fullName'] = $imap_msg['from']['name']; |
---|
| 266 | $msg['msgFrom']['mailAddress'] = $imap_msg['from']['email']; |
---|
| 267 | $msg['msgTo'][0]['fullName'] = $imap_msg['to']['name']; |
---|
| 268 | $msg['msgTo'][0]['mailAddress'] = $imap_msg['to']['email']; |
---|
| 269 | $msg['msgReplyTo'][0] = $this->formatMailObject($imap_msg['reply_toaddress']); |
---|
| 270 | $msg['msgSubject'] = mb_convert_encoding($imap_msg['subject'],"UTF8", "ISO_8859-1"); |
---|
| 271 | |
---|
| 272 | $msg['msgHasAttachments'] = $imap_msg['attachment'] ? "1" : "0"; |
---|
| 273 | |
---|
| 274 | $msg['msgFlagged'] = $imap_msg['Flagged'] == "F" ? "1" : "0"; |
---|
| 275 | $msg['msgForwarded']= $imap_msg['Forwarded'] == "F" ? "1" : "0"; |
---|
| 276 | $msg['msgAnswered'] = $imap_msg['Answered'] == "A" ? "1" : "0"; |
---|
| 277 | $msg['msgDraft'] = $imap_msg['Draft'] == "X" ? "1" : "0"; |
---|
| 278 | $msg['msgSeen'] = $imap_msg['Unseen'] == "U" ? "0" : "1"; |
---|
| 279 | |
---|
| 280 | $msg['ContentType'] = $imap_msg['ContentType']; |
---|
| 281 | $msg['msgSize'] = $imap_msg['Size']; |
---|
| 282 | |
---|
[5634] | 283 | $msg['msgBodyResume'] = $imap_msg['msg_sample']['body']; |
---|
| 284 | |
---|
| 285 | if($this->expressoVersion != "2.2") { |
---|
| 286 | $msg['msgBodyResume'] = base64_decode($msg['msgBodyResume']); |
---|
| 287 | } |
---|
| 288 | |
---|
| 289 | $msg['msgBodyResume'] = substr($msg['msgBodyResume'], 2); |
---|
[5595] | 290 | $msg['msgBodyResume'] = str_replace("\r\n", "", $msg['msgBodyResume']); |
---|
| 291 | $msg['msgBodyResume'] = str_replace(chr(160)," ", $msg['msgBodyResume']); |
---|
| 292 | $msg['msgBodyResume'] = preg_replace('/\s\s+/', '', $msg['msgBodyResume']); |
---|
| 293 | $msg['msgBodyResume'] = mb_convert_encoding($msg['msgBodyResume'],"UTF8", "ISO_8859-1"); |
---|
| 294 | |
---|
| 295 | $all_msgs[] = $msg; |
---|
| 296 | } |
---|
| 297 | $this->result = array ( |
---|
| 298 | 'messages' => $all_msgs, |
---|
| 299 | 'timeZone' => $imap_msgs['offsetToGMT'], |
---|
| 300 | 'totalUnseen' => $imap_msgs['tot_unseen'] |
---|
| 301 | ); |
---|
| 302 | |
---|
| 303 | return $this->getResponse(); |
---|
| 304 | } |
---|
| 305 | } |
---|