diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Folder.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Folder.php index f105e7046..7d3f4a393 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Folder.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Folder.php @@ -105,9 +105,6 @@ class Folder return 'INBOX' === \strtoupper($this->sFullName) || \in_array('\\inbox', $this->aFlagsLowerCase); } - /** - * @param mixed $mData - */ public function SetMetadata(string $sName, string $sData) : void { $this->aMetadata[$sName] = $sData; @@ -118,17 +115,11 @@ class Folder $this->aMetadata = $aMetadata; } - /** - * @return mixed - */ public function GetMetadata(string $sName) : ?string { return isset($this->aMetadata[$sName]) ? $this->aMetadata[$sName] : null; } - /** - * @return array - */ public function Metadata() : array { return $this->aMetadata; diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/ImapClient.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/ImapClient.php index e55ab992c..38cbc88c9 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/ImapClient.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/ImapClient.php @@ -67,6 +67,7 @@ class ImapClient extends \MailSo\Net\NetClient * @var bool */ public $__FORCE_SELECT_ON_EXAMINE__ = false; + public $__DISABLE_METADATA = false; /** * @var bool @@ -92,7 +93,7 @@ class ImapClient extends \MailSo\Net\NetClient parent::Connect($sServerName, $iPort, $iSecurityType, $bVerifySsl, $bAllowSelfSigned, $sClientCert); - $this->aCapabilityItems = $this->getResponse('*')->getCapabilityResult(); + $this->setCapabilities($this->getResponse('*')); if ($this->IsSupported('STARTTLS') && \MailSo\Net\Enumerations\ConnectionSecurityType::UseStartTLS($this->iSecurityType)) { @@ -225,7 +226,7 @@ class ImapClient extends \MailSo\Net\NetClient )); } - $this->aCapabilityItems = $oResponse->getCapabilityResult(); + $this->setCapabilities($oResponse); if (\strlen($sProxyAuthUser)) { @@ -285,12 +286,21 @@ class ImapClient extends \MailSo\Net\NetClient public function Capability() : ?array { if (!$this->aCapabilityItems) { - $this->aCapabilityItems = $this->SendRequestGetResponse('CAPABILITY') - ->getCapabilityResult(); + $this->setCapabilities($this->SendRequestGetResponse('CAPABILITY')); } return $this->aCapabilityItems; } + private function setCapabilities(ResponseCollection $oResponseCollection) : void + { + $aList = $oResponseCollection->getCapabilityResult(); + if ($aList && $this->__DISABLE_METADATA) { + // Issue #365: Many folders on Cyrus IMAP breaks login + $aList = \array_diff($aList, ['METADATA']); + } + $this->aCapabilityItems = $aList; + } + /** * Test support for things like: * IMAP4rev1 IMAP4rev2 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php index 450a052ee..a2cd9ffe1 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php @@ -1234,6 +1234,7 @@ class Actions } $this->MailClient()->ImapClient()->__FORCE_SELECT_ON_EXAMINE__ = !!$this->oConfig->Get('labs', 'use_imap_force_selection'); + $this->MailClient()->ImapClient()->__DISABLE_METADATA = !!$this->oConfig->Get('labs', 'imap_disable_metadata'); } return $oAccount; diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Config/Application.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Config/Application.php index f108501bd..b298be84a 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Config/Application.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Config/Application.php @@ -369,6 +369,7 @@ Enables caching in the system'), 'imap_show_login_alert' => array(true), 'imap_use_list_status' => array(true), 'imap_timeout' => array(300), + 'imap_disable_metadata' => array(false), 'smtp_show_server_errors' => array(false), 'smtp_timeout' => array(60), 'sieve_auth_plain_initial' => array(true),