проверка imap бросает уведомление, когда почтовый ящик пуст
Итак, я недавно начал свою первую настоящую работу (ура!) и работаю над проверкой электронной почты.
Все отлично работает, никаких ошибок... при условии, что есть электронные письма.
$mbox = imap_open("{.../pop3/novalidate-cert}INBOX","[email protected]","...");
$inbox = imap_check($mbox);
Приведенный выше код отлично работает, когда во входящих есть электронные письма, но если их нет, я получаю эту ошибку в конце страницы:
Примечание: Неизвестно: Почтовый ящик пуст (errflg=1) в неизвестном в строке 0
Никакое подавление ошибок, похоже, не в состоянии остановить это брошенный, кроме error_reporting(E_ALL^E_NOTICE)
, который я бы предпочел не использовать (на этот раз!)
Можно ли что-нибудь сделать?
2 answers
Я думаю, что это может быть несоответствие PHP.
Ознакомьтесь с этой библиотекой IMAP https://github.com/barbushin/php-imap . Я использовал это в проекте, который импортировал тысячи электронных писем без каких-либо проблем.
protected function initImapStream() {
$imapStream = @imap_open($this->imapPath, $this->login, $this->password);
if(!$imapStream) {
throw new ImapMailboxException('Connection error: ' . imap_last_error());
}
return $imapStream;
}
Используется оператор подавления ошибок @
, я предполагаю, что это обходной путь.
Источник: https://github.com/barbushin/php-imap/blob/master/src/ImapMailbox.php#L48
Изменить: Оказывается, вы можете отключить это уведомление с помощью вариант. Цитата из http://php.net/manual/en/function.imap-open.php#73514
Вы можете избежать этого сообщения:
Предупреждение: (null)(); Почтовый ящик пуст (errflg=1) в неизвестном в строке 0
Путем указания параметра OP_SILENT для imap_open.
Я только что обнаружил, что вызов функции imap_errors() подавляет исключение уведомления.
Поэтому единственное, что вам нужно сделать, это добавить это где-нибудь в свой код:
$errors = imap_errors();
Что вы будете делать с переменной $errors после этого, зависит от вас.