Added method to determine IMAP server vendor, for future use
| | |
| | | // Otherwise it will be determined automatically |
| | | $config['imap_delimiter'] = null; |
| | | |
| | | // If you know your imap's folder vendor, you can specify it here. |
| | | // Otherwise it will be determined automatically. Use lower-case |
| | | // identifiers, e.g. 'dovecot', 'cyrus', 'gmail', 'hmail', 'uw-imap'. |
| | | $config['imap_vendor'] = null; |
| | | |
| | | // If IMAP server doesn't support NAMESPACE extension, but you're |
| | | // using shared folders or personal root folder is non-empty, you'll need to |
| | | // set these options. All can be strings or arrays of strings. |
| | |
| | | |
| | | $_SESSION['imap_namespace'] = $this->namespace; |
| | | $_SESSION['imap_delimiter'] = $this->delimiter; |
| | | } |
| | | |
| | | /** |
| | | * Returns IMAP server vendor name |
| | | * |
| | | * @return string Vendor name |
| | | * @since 1.2 |
| | | */ |
| | | public function get_vendor() |
| | | { |
| | | if ($_SESSION['imap_vendor'] !== null) { |
| | | return $_SESSION['imap_vendor']; |
| | | } |
| | | |
| | | $config = rcube::get_instance()->config; |
| | | $imap_vendor = $config->get('imap_vendor'); |
| | | |
| | | if ($imap_vendor) { |
| | | return $imap_vendor; |
| | | } |
| | | |
| | | if (!$this->check_connection()) { |
| | | return; |
| | | } |
| | | |
| | | if (($ident = $this->conn->data['ID']) === null) { |
| | | $ident = $this->conn->id(array( |
| | | 'name' => 'Roundcube', |
| | | 'version' => RCUBE_VERSION, |
| | | 'php' => PHP_VERSION, |
| | | 'os' => PHP_OS, |
| | | )); |
| | | } |
| | | |
| | | $vendor = (string) (!empty($ident) ? $ident['name'] : ''); |
| | | $ident = strtolower($vendor . ' ' . $this->conn->data['GREETING']); |
| | | $vendors = array('cyrus', 'dovecot', 'uw-imap', 'gmail', 'hmail'); |
| | | |
| | | foreach ($vendors as $v) { |
| | | if (strpos($ident, $v) !== false) { |
| | | $vendor = $v; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | return $_SESSION['imap_vendor'] = $vendor; |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | // Send ID info |
| | | if (!empty($this->prefs['ident']) && $this->getCapability('ID')) { |
| | | $this->id($this->prefs['ident']); |
| | | $this->data['ID'] = $this->id($this->prefs['ident']); |
| | | } |
| | | |
| | | $auth_method = $this->prefs['auth_type']; |
| | |
| | | $this->closeConnection(); |
| | | return false; |
| | | } |
| | | |
| | | $this->data['GREETING'] = trim(preg_replace('/\[[^\]]+\]\s*/', '', $line)); |
| | | |
| | | // RFC3501 [7.1] optional CAPABILITY response |
| | | if (preg_match('/\[CAPABILITY ([^]]+)\]/i', $line, $matches)) { |
| | |
| | | list($code, $response) = $this->execute('ID', array( |
| | | !empty($args) ? '(' . implode(' ', (array) $args) . ')' : $this->escape(null) |
| | | )); |
| | | |
| | | |
| | | if ($code == self::ERROR_OK && preg_match('/\* ID /i', $response)) { |
| | | $response = substr($response, 5); // remove prefix "* ID " |