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 ef6919ea6..f4e5c8985 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 @@ -69,8 +69,6 @@ class ImapClient extends \MailSo\Net\NetClient { $this->aTagTimeouts['*'] = \microtime(true); - $this->SetTimeOuts(10, $oSettings->timeout); - parent::Connect($oSettings); $this->setCapabilities($this->getResponse('*')); diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Settings.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Settings.php index 777990e97..3fb1a662c 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Settings.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Settings.php @@ -18,8 +18,7 @@ namespace MailSo\Imap; class Settings extends \MailSo\Net\ConnectSettings { public int - $port = 143, - $timeout = 300; + $port = 143; public bool $disable_list_status = false, @@ -61,8 +60,7 @@ class Settings extends \MailSo\Net\ConnectSettings 'force_select' => $this->force_select, 'message_all_headers' => $this->message_all_headers, 'message_list_limit' => $this->message_list_limit, - 'search_filter' => $this->message_list_filter, - 'timeout' => $this->timeout + 'search_filter' => $this->message_list_filter ] ); } diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Net/ConnectSettings.php b/snappymail/v/0.0.0/app/libraries/MailSo/Net/ConnectSettings.php index e115dc26d..3406ba45a 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Net/ConnectSettings.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Net/ConnectSettings.php @@ -21,6 +21,11 @@ class ConnectSettings implements \JsonSerializable public int $port; + /** + * stream timeout in seconds + */ + public int $timeout = 10; + // none, TLS, STARTTLS public int $type = Enumerations\ConnectionSecurityType::AUTO_DETECT; // public int $type = Enumerations\ConnectionSecurityType::NONE; @@ -52,6 +57,7 @@ class ConnectSettings implements \JsonSerializable $object->host = $aSettings['host']; $object->port = $aSettings['port']; $object->type = isset($aSettings['type']) ? $aSettings['type'] : $aSettings['secure']; + $object->timeout = isset($aSettings['timeout']) ? $aSettings['timeout'] : 300; $object->shortLogin = !empty($aSettings['shortLogin']); $object->ssl = SSLContext::fromArray($aSettings['ssl'] ?? []); return $object; @@ -65,6 +71,7 @@ class ConnectSettings implements \JsonSerializable 'host' => $this->host, 'port' => $this->port, 'type' => $this->type, + 'timeout' => $this->timeout, 'shortLogin' => $this->shortLogin, 'ssl' => $this->ssl ); diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Net/NetClient.php b/snappymail/v/0.0.0/app/libraries/MailSo/Net/NetClient.php index 6257ef047..c1440e4a7 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Net/NetClient.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Net/NetClient.php @@ -34,8 +34,6 @@ abstract class NetClient private int $iConnectTimeOut = 10; - private int $iSocketTimeOut = 10; - private float $iStartConnectTime = 0; /** @@ -64,10 +62,9 @@ abstract class NetClient return $this->Settings->port; } - public function SetTimeOuts(int $iConnectTimeOut = 10, int $iSocketTimeOut = 10) : void + public function SetTimeOuts(int $iConnectTimeOut = 10) : void { - $this->iConnectTimeOut = max(5, $iConnectTimeOut); - $this->iSocketTimeOut = max(5, $iSocketTimeOut); + $this->iConnectTimeOut = \max(5, $iConnectTimeOut); } /** @@ -148,8 +145,7 @@ abstract class NetClient $this->writeLog('Connect ('.($this->rConnect ? 'success' : 'failed').')'); - if (!$this->rConnect) - { + if (!$this->rConnect) { $this->writeLogException( new Exceptions\SocketCanNotConnectToHostException( \MailSo\Base\Locale::ConvertSystemString($sErrorStr), (int) $iErrorNo, @@ -159,11 +155,9 @@ abstract class NetClient $this->writeLog((\microtime(true) - $this->iStartConnectTime).' (raw connection)', \LOG_DEBUG); - if ($this->rConnect) - { - if (\MailSo\Base\Utils::FunctionCallable('stream_set_timeout')) - { - \stream_set_timeout($this->rConnect, $this->iSocketTimeOut); + if ($this->rConnect) { + if (\MailSo\Base\Utils::FunctionCallable('stream_set_timeout')) { + \stream_set_timeout($this->rConnect, \max(5, $oSettings->timeout)); } } } diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Messages.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Messages.php index fc05295e8..1be982631 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Messages.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Messages.php @@ -807,7 +807,6 @@ trait Messages $oSmtpClient = new \MailSo\Smtp\SmtpClient(); $oSmtpClient->SetLogger($this->Logger()); - $oSmtpClient->SetTimeOuts(10, (int) \RainLoop\Api::Config()->Get('labs', 'smtp_timeout', 60)); $bUsePhpMail = false; $oAccount->SmtpConnectAndLoginHelper($this->Plugins(), $oSmtpClient, $this->Config(), $bUsePhpMail); diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/ActionsAdmin.php b/snappymail/v/0.0.0/app/libraries/RainLoop/ActionsAdmin.php index eec6eaaa6..441d4ccc8 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/ActionsAdmin.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/ActionsAdmin.php @@ -281,8 +281,6 @@ class ActionsAdmin extends Actions $bSieveResult = false; $sSieveErrorDesc = ''; - $iConnectionTimeout = 5; - $oDomain = $this->DomainProvider()->LoadOrCreateNewFromAction($this, 'test.example.com'); if ($oDomain) { @@ -292,7 +290,6 @@ class ActionsAdmin extends Actions { $oImapClient = new \MailSo\Imap\ImapClient(); $oImapClient->SetLogger($this->Logger()); - $oImapClient->SetTimeOuts($iConnectionTimeout); $oSettings = $oDomain->ImapSettings(); $oImapClient->Connect($oSettings); @@ -335,7 +332,6 @@ class ActionsAdmin extends Actions { $oSmtpClient = new \MailSo\Smtp\SmtpClient(); $oSmtpClient->SetLogger($this->Logger()); - $oSmtpClient->SetTimeOuts($iConnectionTimeout); $oSettings = $oDomain->SmtpSettings(); $oSmtpClient->Connect($oSettings, \MailSo\Smtp\SmtpClient::EhloHelper()); @@ -371,7 +367,6 @@ class ActionsAdmin extends Actions { $oSieveClient = new \MailSo\Sieve\SieveClient(); $oSieveClient->SetLogger($this->Logger()); - $oSieveClient->SetTimeOuts($iConnectionTimeout); $oSettings = $oDomain->SieveSettings(); $oSieveClient->Connect($oSettings); diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Model/Account.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Model/Account.php index 241cc3357..4b1cf879c 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Model/Account.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Model/Account.php @@ -215,9 +215,9 @@ abstract class Account implements \JsonSerializable public function ImapConnectAndLoginHelper(\RainLoop\Plugins\Manager $oPlugins, \MailSo\Imap\ImapClient $oImapClient, \RainLoop\Config\Application $oConfig) : bool { $oSettings = $this->Domain()->ImapSettings(); + $oSettings->timeout = \max($oSettings->timeout, (int) $oConfig->Get('imap', 'timeout', $oSettings->timeout)); $oSettings->Login = $this->IncLogin(); - $oSettings->timeout = \max($oSettings->timeout, (int) $oConfig->Get('imap', 'timeout', $oSettings->timeout)); $oSettings->disable_list_status |= !$oConfig->Get('imap', 'use_list_status', true); $oSettings->disable_metadata |= !!$oConfig->Get('imap', 'disable_metadata', false); $oSettings->disable_move |= !$oConfig->Get('imap', 'use_move', true); @@ -229,7 +229,7 @@ abstract class Account implements \JsonSerializable $oSettings->force_select |= !!$oConfig->Get('imap', 'use_force_selection', false); $oSettings->folder_list_limit = \min($oSettings->folder_list_limit, (int) $oConfig->Get('imap', 'folder_list_limit', 200)); $oSettings->message_all_headers |= !!$oConfig->Get('imap', 'message_all_headers', false); - $oSettings->message_list_limit = \min($oSettings->message_list_limit, (int) $oConfig->Get('imap', 'message_list_count_limit_trigger', 0)); + $oSettings->message_list_limit = \max($oSettings->message_list_limit, (int) $oConfig->Get('imap', 'message_list_count_limit_trigger', 0)); $oSettings->search_filter = $oSettings->search_filter ?: \trim($oConfig->Get('imap', 'message_list_permanent_filter', '')); // $oSettings->thread_limit = \min($oSettings->thread_limit, (int) $oConfig->Get('imap', 'large_thread_limit', 50)); @@ -243,6 +243,7 @@ abstract class Account implements \JsonSerializable public function SmtpConnectAndLoginHelper(\RainLoop\Plugins\Manager $oPlugins, \MailSo\Smtp\SmtpClient $oSmtpClient, \RainLoop\Config\Application $oConfig, bool &$bUsePhpMail = false) : bool { $oSettings = $this->Domain()->SmtpSettings(); + $oSettings->timeout = \max($oSettings->timeout, (int) $oConfig->Get('labs', 'smtp_timeout', 60)); $oSettings->Login = $this->OutLogin(); $oSettings->usePhpMail = $bUsePhpMail; $oSettings->Ehlo = \MailSo\Smtp\SmtpClient::EhloHelper(); @@ -262,6 +263,7 @@ abstract class Account implements \JsonSerializable public function SieveConnectAndLoginHelper(\RainLoop\Plugins\Manager $oPlugins, \MailSo\Sieve\SieveClient $oSieveClient, \RainLoop\Config\Application $oConfig) { $oSettings = $this->Domain()->SieveSettings(); + $oSettings->timeout = \max($oSettings->timeout, (int) $oConfig->Get('labs', 'sieve_timeout', 10)); $oSettings->Login = $this->IncLogin(); $oPlugins->RunHook('sieve.before-connect', array($this, $oSieveClient, $oSettings)); diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Filters/SieveStorage.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Filters/SieveStorage.php index f85e15b33..eb859de54 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Filters/SieveStorage.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Filters/SieveStorage.php @@ -33,7 +33,6 @@ class SieveStorage implements FiltersInterface { $oSieveClient = new \MailSo\Sieve\SieveClient(); $oSieveClient->SetLogger($this->oLogger); - $oSieveClient->SetTimeOuts(10, (int) \RainLoop\Api::Config()->Get('labs', 'sieve_timeout', 10)); return $oAccount->SieveConnectAndLoginHelper($this->oPlugins, $oSieveClient, $this->oConfig) ? $oSieveClient : null;