| | |
| | | * @return boolean TRUE on success, FALSE on failure |
| | | * @access public |
| | | */ |
| | | function connect($host, $user, $pass, $port=143, $use_ssl=null, $auth_type='check') |
| | | function connect($host, $user, $pass, $port=143, $use_ssl=null, $auth_type=null) |
| | | { |
| | | global $ICL_SSL, $ICL_PORT, $IMAP_USE_INTERNAL_DATE; |
| | | |
| | |
| | | $ICL_PORT = $port; |
| | | $IMAP_USE_INTERNAL_DATE = false; |
| | | |
| | | $this->conn = iil_Connect($host, $user, $pass, array('imap' => $auth_type)); |
| | | $this->conn = iil_Connect($host, $user, $pass, array('imap' => $auth_type ? $auth_type : 'check')); |
| | | $this->host = $host; |
| | | $this->user = $user; |
| | | $this->pass = $pass; |
| | |
| | | $struct->ctype_primary = 'multipart'; |
| | | |
| | | // find first non-array entry |
| | | for ($i=1; count($part); $i++) |
| | | for ($i=1; $i<count($part); $i++) |
| | | if (!is_array($part[$i])) |
| | | { |
| | | $struct->ctype_secondary = strtolower($part[$i]); |
| | |
| | | |
| | | $struct->parts = array(); |
| | | for ($i=0, $count=0; $i<count($part); $i++) |
| | | if (is_array($part[$i]) && count($part[$i]) > 5) |
| | | if (is_array($part[$i]) && count($part[$i]) > 3) |
| | | $struct->parts[] = $this->_structure_part($part[$i], ++$count, $struct->mime_id); |
| | | |
| | | return $struct; |
| | |
| | | if (is_array($part[8]) && empty($struct->parts)) |
| | | $struct->parts[] = $this->_structure_part($part[8], ++$count, $struct->mime_id); |
| | | } |
| | | |
| | | |
| | | // normalize filename property |
| | | if ($filename_mime = $struct->d_parameters['filename'] ? $struct->d_parameters['filename'] : $struct->ctype_parameters['name']) |
| | | $struct->filename = rcube_imap::decode_mime_string($filename_mime, $this->default_charset); |
| | | { |
| | | $struct->filename = rcube_imap::decode_mime_string($filename_mime, |
| | | $struct->charset ? $struct->charset : rc_detect_encoding($filename_mime, $this->default_charset)); |
| | | } |
| | | else if ($filename_encoded = $struct->d_parameters['filename*'] ? $struct->d_parameters['filename*'] : $struct->ctype_parameters['name*']) |
| | | { |
| | | // decode filename according to RFC 2231, Section 4 |
| | |
| | | $struct->filename = rcube_charset_convert(urldecode($filename_urlencoded), $filename_charset); |
| | | } |
| | | else if (!empty($struct->headers['content-description'])) |
| | | $struct->filename = rcube_imap::decode_mime_string($struct->headers['content-description'], $this->default_charset); |
| | | $struct->filename = rcube_imap::decode_mime_string($struct->headers['content-description'], |
| | | $struct->charset ? $struct->charset : rc_detect_encoding($struct->headers['content-description'],$this->default_charset)); |
| | | |
| | | return $struct; |
| | | } |
| | |
| | | */ |
| | | function &get_body($uid, $part=1) |
| | | { |
| | | return $this->get_message_part($uid, $part); |
| | | $headers = $this->get_headers($uid); |
| | | return rcube_charset_convert( |
| | | $this->mime_decode($this->get_message_part($uid, $part), 'quoted-printable'), |
| | | $headers->charset ? $headers->charset : $this->default_charset); |
| | | } |
| | | |
| | | |
| | |
| | | // send expunge command in order to have the moved message |
| | | // really deleted from the source mailbox |
| | | if ($moved) { |
| | | $this->_expunge($from_mbox, FALSE); |
| | | $this->_clear_messagecount($from_mbox); |
| | | $this->_clear_messagecount($to_mbox); |
| | | // but only when flag_for_deletion is set to false |
| | | if (!rcmail::get_instance()->config->get('flag_for_deletion', false)) |
| | | { |
| | | $this->_expunge($from_mbox, FALSE); |
| | | $this->_clear_messagecount($from_mbox); |
| | | $this->_clear_messagecount($to_mbox); |
| | | } |
| | | } |
| | | // moving failed |
| | | else if (rcmail::get_instance()->config->get('delete_always', false)) { |
| | |
| | | if (!is_array($a_uids)) |
| | | return false; |
| | | |
| | | |
| | | // convert uids to message ids |
| | | $a_mids = array(); |
| | | foreach ($a_uids as $uid) |
| | |
| | | { |
| | | $this->_expunge($mailbox, FALSE); |
| | | $this->_clear_messagecount($mailbox); |
| | | unset($this->uid_id_map[$mailbox]); |
| | | } |
| | | |
| | | // remove message ids from search set |
| | | if ($moved && $this->search_set && $mailbox == $this->mailbox) |
| | | if ($deleted && $this->search_set && $mailbox == $this->mailbox) |
| | | $this->search_set = array_diff($this->search_set, $a_mids); |
| | | |
| | | // remove deleted messages from cache |
| | |
| | | */ |
| | | function _sort_mailbox_list($a_folders) |
| | | { |
| | | $a_out = $a_defaults = $folders = $subfolders = array(); |
| | | $a_out = $a_defaults = $folders = array(); |
| | | |
| | | $delimiter = $this->get_hierarchy_delimiter(); |
| | | |
| | |
| | | if (($p = array_search(strtolower($folder), $this->default_folders_lc)) !== false && !$a_defaults[$p]) |
| | | $a_defaults[$p] = $folder; |
| | | else |
| | | $folders[$folder] = mb_strtolower(rcube_charset_convert($folder, 'UTF-7')); |
| | | $folders[$folder] = rc_strtolower(rcube_charset_convert($folder, 'UTF-7')); |
| | | } |
| | | |
| | | asort($folders, SORT_LOCALE_STRING); |