If you do not use imap_errors() to clear the error stack, any errors that remain at the end of the script execution will be raised as PHP Notices.
(PHP 4, PHP 5, PHP 7, PHP 8)
imap_errors — Liefert alle bisher aufgetretenen Fehlermeldungen
Gibt alle IMAP-Fehlermeldungen zurück (falls vorhanden), die im Verlauf der Seitenanfrage oder seit dem letzten Löschen der Fehlerliste aufgetreten sind.
Wenn imap_errors() aufgerufen wird, wird der Fehlerstack anschließend gelöscht.
Diese Funktion besitzt keine Parameter.
Diese Funktion gibt ein Array aller IMAP-Fehlermeldungen seit dem letzten
Aufruf von imap_errors() oder seit dem Beginn des
Skripts zurück. Wenn keine Fehlermeldungen vorhanden sind, wird false
zurückgegeben.
If you do not use imap_errors() to clear the error stack, any errors that remain at the end of the script execution will be raised as PHP Notices.
When calling imap_close($mbox), notices will be generated for each error that has occurred within the imap functions. To suppress these error messages (including Mailbox is empty, which is not really an error) simply call imap_errors() and then imap_close($mbox).
For those curious, this function will return a linear array of strings as opposed to say error_get_last which returns an associative array of different things.
e.g.
[0 => '[TRYCREATE] No folder {imap.gmail.com} (Failure)']
This can generate the string "Mailbox is empty" right after a call to imap_open(). That's not an error. That means something like this is not good enough to know the open failed due to a wrong password or host name or whatever. This
$imap = @imap_open( $mailbox, $user, $pass);
$errors = @imap_errors();
if ( $errors ) {
echo 'Login failed: ' . implode ('; ', $errors );
}
can output "Login failed: Mailbox is empty" which is silly.
Instead, check the return value from imap_open().
$imap = @imap_open( $mailbox, $user, $pass);
if ( ! $imap ) {
$errors = @imap_errors();
echo 'Login failed: ' . implode ('; ', $errors );
}