safe icon indicating copy to clipboard operation
safe copied to clipboard

imap_open warning results in exception

Open OskarStark opened this issue 5 years ago • 2 comments

ErrorException/src/Mail/ImapManager.php in App\Mail\ImapManager::connect Warning: imap_open(): Couldn't open stream {mail.foo-bar.de:993/ssl/novalidate-cert}

Hi,. the following code results in a warning before using \Safe\imap_open:

$stream = imap_open(
    sprintf('{%s:%d/ssl/novalidate-cert}', $this->host, $this->port),
    $this->username,
    $this->password,
    0,
    1,
    ['DISABLE_AUTHENTICATOR' => 'GSSAPI']
);

now the reworked code with using \Safe\imap_open:

try {
    $stream = imap_open(
        sprintf('{%s:%d/ssl/novalidate-cert}', $this->host, $this->port),
        $this->username,
        $this->password,
        0,
        1,
        ['DISABLE_AUTHENTICATOR' => 'GSSAPI']
    );
} catch (Exceptions\ImapException $exception) {
    throw new \Exception(
        sprintf('Cannot connect to %s on port %d with username %s: %s',
            $this->host,
            $this->port,
            $this->username,
            imap_last_error()
        )
    );
}

results with the error above where its only a warning. Is there a best pracitse on how to handle such warnings, which are now exceptions? 🤔

cc @localheinz

OskarStark avatar Jan 15 '20 07:01 OskarStark

Hey @OskarStark ,

I'm sorry, I don't understand your issue. Is it that Safe does not print the correct error message (because the correct error message should be fetched using imap_last_error and we are not using that in Safe?)

Could you be a bit more specific? (maybe by showing the warning you are getting and we you expect from Safe?)

moufmouf avatar Jan 16 '20 09:01 moufmouf

Hi @moufmouf 👋

first of all thanks for your time and your answer. Ofc let me explain: Before a warning was raised: Warning: imap_open(): Couldn't open stream {mail.foo-bar.de:993/ssl/novalidate-cert}. Now this warning is wrapped in an Exception, and because of this, the code stopped here.

Is the best practice here to catch the ErrorException or does it make sense for the Safe lib to wrap all warnings in a special "WarningException" to stay BC and handle them like before? in this case swallow it and go further?

I hope it makes it a bit more clear? If not maybe @localheinz can help me to mention the problem with other words?

Cheers Oskar

OskarStark avatar Jan 16 '20 09:01 OskarStark