Есть два способа следовать:
1. Цикл сообщений
$count = imap_num_msg($connection);
for($msgno = 1; $msgno <= $count; $msgno++) {
$headers = imap_headerinfo($connection, $msgno);
if($headers->Unseen == 'U') {
... do something ...
}
}
2. Использование imap_search
Есть флаг UNSEEN, который вы можете использовать для поиска непрочитанных писем. Вы бы вызвали функцию imap_search с флагом UNSEEN следующим образом:
$result = imap_search($connection, 'UNSEEN');
Если вам нужно объединить это с дополнительными флагами поиска, например, для поиска сообщений от me@example.com, вы можете сделать это:
$result = imap_search($connection, 'UNSEEN FROM "me@example.com"');
Полный список доступных флагов приведен в разделе критериев на странице руководства imap_search на сайте PHP (www.php.net/imap_search)
Источник: http://www.electrictoolbox.com/php-imap-unread-messages/