try {…} catch не генерирует исключение в PHP / Symfony2 / PHPImap

1

Я использую библиотеку 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)

Он бросает новое исключение, почему я не могу его поймать?

Любой намек оценили!

  • 0
    опечатка в catch (\Exception $e) ?? это должно было быть catch (Exception $e)
  • 0
    Ну, я использую исключение глобального пространства имен, но даже если я не поймаю ...
Показать ещё 5 комментариев
Теги:
exception
try-catch

1 ответ

2
Лучший ответ

Причина очень проста. Вы вызываете только конструктор класса в блоке try. Если вы посмотрите в исходный код класса, вы увидите, что конструктор ничего не вызывает.

https://github.com/barbushin/php-imap/blob/master/src/PhpImap/Mailbox.php#L20-L31

Это означает, что исключение броска кода должно быть под вами try/catch. Вы должны переместить его внутри блока try, если хотите поймать исключение. Я говорю о $mailbox->checkMailbox(). Эта команда генерирует исключение.

  • 0
    ИДЕАЛЬНО, я попробовал это с полным IF Заявлением checkMailbox (), безрезультатно. Теперь я знаю почему ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню