| | |
| | | $this->fp = @fsockopen($host, $this->prefs['port'], $errno, $errstr, $this->prefs['timeout']); |
| | | |
| | | if (!$this->fp) { |
| | | if (!$errstr) { |
| | | $errstr = "Unknown reason (fsockopen() function disabled?)"; |
| | | } |
| | | $this->setError(self::ERROR_BAD, sprintf("Could not connect to %s:%d: %s", $host, $this->prefs['port'], $errstr)); |
| | | return false; |
| | | } |
| | | |
| | | if ($this->prefs['timeout'] > 0) |
| | | if ($this->prefs['timeout'] > 0) { |
| | | stream_set_timeout($this->fp, $this->prefs['timeout']); |
| | | } |
| | | |
| | | $line = trim(fgets($this->fp, 8192)); |
| | | |
| | |
| | | */ |
| | | function closeConnection() |
| | | { |
| | | if ($this->putLine($this->nextTag() . ' LOGOUT')) { |
| | | if ($this->logged && $this->putLine($this->nextTag() . ' LOGOUT')) { |
| | | $this->readReply(); |
| | | } |
| | | |
| | |
| | | // * LIST (<options>) <delimiter> <mailbox> |
| | | if ($cmd == 'LIST' || $cmd == 'LSUB') { |
| | | list($opts, $delim, $mailbox) = $this->tokenizeResponse($line, 3); |
| | | |
| | | // Remove redundant separator at the end of folder name, UW-IMAP bug? (#1488879) |
| | | if ($delim) { |
| | | $mailbox = rtrim($mailbox, $delim); |
| | | } |
| | | |
| | | // Add to result array |
| | | if (!$lstatus) { |
| | |
| | | return $result; |
| | | } |
| | | |
| | | function fetchHeaders($mailbox, $message_set, $is_uid = false, $bodystr = false, $add = '') |
| | | /** |
| | | * Returns message(s) data (flags, headers, etc.) |
| | | * |
| | | * @param string $mailbox Mailbox name |
| | | * @param mixed $message_set Message(s) sequence identifier(s) or UID(s) |
| | | * @param bool $is_uid True if $message_set contains UIDs |
| | | * @param bool $bodystr Enable to add BODYSTRUCTURE data to the result |
| | | * @param array $add_headers List of additional headers |
| | | * |
| | | * @return bool|array List of rcube_message_header elements, False on error |
| | | */ |
| | | function fetchHeaders($mailbox, $message_set, $is_uid = false, $bodystr = false, $add_headers = array()) |
| | | { |
| | | $query_items = array('UID', 'RFC822.SIZE', 'FLAGS', 'INTERNALDATE'); |
| | | if ($bodystr) |
| | | $headers = array('DATE', 'FROM', 'TO', 'SUBJECT', 'CONTENT-TYPE', 'CC', 'REPLY-TO', |
| | | 'LIST-POST', 'DISPOSITION-NOTIFICATION-TO', 'X-PRIORITY'); |
| | | |
| | | if (!empty($add_headers)) { |
| | | $add_headers = array_map('strtoupper', $add_headers); |
| | | $headers = array_unique(array_merge($headers, $add_headers)); |
| | | } |
| | | |
| | | if ($bodystr) { |
| | | $query_items[] = 'BODYSTRUCTURE'; |
| | | $query_items[] = 'BODY.PEEK[HEADER.FIELDS (' |
| | | . 'DATE FROM TO SUBJECT CONTENT-TYPE CC REPLY-TO LIST-POST DISPOSITION-NOTIFICATION-TO X-PRIORITY' |
| | | . ($add ? ' ' . trim($add) : '') |
| | | . ')]'; |
| | | } |
| | | |
| | | $query_items[] = 'BODY.PEEK[HEADER.FIELDS (' . implode(' ', $headers) . ')]'; |
| | | |
| | | $result = $this->fetch($mailbox, $message_set, $is_uid, $query_items); |
| | | |
| | | return $result; |
| | | } |
| | | |
| | | function fetchHeader($mailbox, $id, $uidfetch=false, $bodystr=false, $add='') |
| | | /** |
| | | * Returns message data (flags, headers, etc.) |
| | | * |
| | | * @param string $mailbox Mailbox name |
| | | * @param int $id Message sequence identifier or UID |
| | | * @param bool $is_uid True if $id is an UID |
| | | * @param bool $bodystr Enable to add BODYSTRUCTURE data to the result |
| | | * @param array $add_headers List of additional headers |
| | | * |
| | | * @return bool|rcube_message_header Message data, False on error |
| | | */ |
| | | function fetchHeader($mailbox, $id, $is_uid = false, $bodystr = false, $add_headers = array()) |
| | | { |
| | | $a = $this->fetchHeaders($mailbox, $id, $uidfetch, $bodystr, $add); |
| | | $a = $this->fetchHeaders($mailbox, $id, $is_uid, $bodystr, $add_headers); |
| | | if (is_array($a)) { |
| | | return array_shift($a); |
| | | } |