diff --git a/src/PhpImap/Imap.php b/src/PhpImap/Imap.php index 80e4d3e9..16f7d878 100644 --- a/src/PhpImap/Imap.php +++ b/src/PhpImap/Imap.php @@ -715,7 +715,7 @@ public static function open( $result = @\imap_open($mailbox, $username, $password, $options, $n_retries, $params); if (!$result) { - throw new ConnectionException(\imap_errors()); + throw new ConnectionException(\imap_errors() ?: []); } return $result; diff --git a/src/PhpImap/Mailbox.php b/src/PhpImap/Mailbox.php index d6e2514c..626bb854 100644 --- a/src/PhpImap/Mailbox.php +++ b/src/PhpImap/Mailbox.php @@ -611,7 +611,17 @@ public function getImapStream(bool $forceConnection = true) public function hasImapStream(): bool { - return (\is_resource($this->imapStream) || $this->imapStream instanceof \IMAP\Connection) && \imap_ping($this->imapStream); + try { + return (\is_resource($this->imapStream) || $this->imapStream instanceof \IMAP\Connection) && \imap_ping($this->imapStream); + } catch (\Error $exception) { + // From PHP 8.1.10 imap_ping() on a closed stream throws a ValueError. See #680. + $valueError = '\ValueError'; + if (class_exists($valueError) && $exception instanceof $valueError) { + return false; + } + + throw $exception; + } } /**