Я использую библиотеку ImapMail и пытаюсь инициировать новый почтовый ящик:
try{
$mailbox = new ImapMailbox($url, $username, $password);
}catch (\Exception $e){
return new Response("fail");
}
Но вышеупомянутая попытка /catch не работает, хотя symfony дает мне следующее:
Connection error: (is empty)
500 Internal Server Error - Exception
Stacktrace
in vendor/php-imap/php-imap/src/PhpImap/Mailbox.php at line 67:
protected function initImapStream() {
$imapStream = @imap_open($this->imapPath, $this->imapLogin, $this->imapPassword, $this->imapOptions, $this->imapRetriesNum, $this->imapParams);
if(!$imapStream) {
throw new Exception('Connection error: ' . imap_last_error());
}
return $imapStream;
}
(Прямая ссылка на функцию на github)
Он бросает новое исключение, почему я не могу его поймать?
Любой намек оценили!
Причина очень проста. Вы вызываете только конструктор класса в блоке try. Если вы посмотрите в исходный код класса, вы увидите, что конструктор ничего не вызывает.
https://github.com/barbushin/php-imap/blob/master/src/PhpImap/Mailbox.php#L20-L31
Это означает, что исключение броска кода должно быть под вами try/catch. Вы должны переместить его внутри блока try, если хотите поймать исключение. Я говорю о $mailbox->checkMailbox()
. Эта команда генерирует исключение.
catch (\Exception $e)
?? это должно было бытьcatch (Exception $e)