Start · Sprachen · PHP · Referenz · imap_num_recent

imap_num_recent

Funktion

Gibt die Anzahl der seit der letzten Verbindung neu eingetroffenen (als <code>\Recent</code> markierten) Nachrichten im aktuell geöffneten Postfach zurück.

seit PHP 4.0.0 Kategorie: http

Signatur

imap_num_recent(IMAP\Connection $imap): int

Beschreibung

imap_num_recent() liest aus dem geöffneten IMAP-Postfach, wie viele Nachrichten vom Server mit dem Flag \Recent markiert sind. Eine Nachricht gilt als recent, wenn sie seit dem letzten Öffnen des Postfachs neu eingegangen ist und noch von keinem IMAP-Client gesehen wurde.

Die Funktion ist nützlich, um schnell zu ermitteln, ob neue E-Mails eingetroffen sind, ohne alle Nachrichten durchsuchen zu müssen. Im Gegensatz zu imap_num_msg(), das die Gesamtanzahl aller Nachrichten liefert, gibt imap_num_recent() nur die Anzahl der tatsächlich neuen, noch nicht gesehenen Nachrichten zurück.

Zu beachten ist, dass der \Recent-Status serverabhängig ist und sich von \Unseen unterscheidet: Recent bedeutet, dass die Nachricht neu im Postfach ist, während Unseen bedeutet, dass sie noch nicht gelesen wurde. Eine Nachricht kann also Unseen, aber nicht mehr Recent sein, sobald eine zweite Verbindung das Postfach öffnet.

Die Funktion eignet sich für einfache Benachrichtigungslogiken oder als schneller Check vor einem aufwändigeren imap_search()-Aufruf.

Parameter

Name Typ Default Beschreibung
$imap Pflicht IMAP\Connection Eine aktive IMAP-Verbindungsinstanz, die zuvor mit imap_open() erstellt wurde.

Rückgabewert

Typ
int
Beschreibung
Gibt die Anzahl der als \Recent markierten Nachrichten im aktuell geöffneten Postfach zurück. Gibt 0 zurück, wenn keine neuen Nachrichten vorhanden sind.

Beispiele

Anzahl neuer Nachrichten ausgeben

<?php
$imap = imap_open('{imap.example.com:143/imap}INBOX', 'benutzer@example.com', 'geheimes_passwort');

if ($imap === false) {
    die('Verbindung fehlgeschlagen: ' . imap_last_error());
}

$anzahlNeu    = imap_num_recent($imap);
$anzahlGesamt = imap_num_msg($imap);

echo "Postfach enthält {$anzahlGesamt} Nachricht(en) insgesamt." . PHP_EOL;
echo "Davon sind {$anzahlNeu} neu eingetroffen." . PHP_EOL;

imap_close($imap);
Postfach enthält 42 Nachricht(en) insgesamt. Davon sind 3 neu eingetroffen.

Einfache Benachrichtigungslogik

<?php
$imap = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'benutzer@example.com', 'geheimes_passwort');

if ($imap === false) {
    die('Verbindung fehlgeschlagen: ' . imap_last_error());
}

$recent = imap_num_recent($imap);

if ($recent > 0) {
    echo "Sie haben {$recent} neue E-Mail(s) erhalten!" . PHP_EOL;
    // Weiterverarbeitung, z. B. imap_search($imap, 'RECENT') aufrufen
    $uids = imap_search($imap, 'RECENT');
    if ($uids !== false) {
        foreach ($uids as $uid) {
            $header = imap_headerinfo($imap, $uid);
            echo "Betreff: " . $header->subject . PHP_EOL;
        }
    }
} else {
    echo "Keine neuen Nachrichten." . PHP_EOL;
}

imap_close($imap);
Sie haben 3 neue E-Mail(s) erhalten! Betreff: Willkommen! Betreff: Ihr Paket wurde versandt Betreff: Meetingeinladung

// Wichtig · Fallstricke

Unterschied zwischen \Recent und \Unseen: Der \Recent-Status wird vom Server automatisch entfernt, sobald das Postfach ein zweites Mal (z. B. von einem anderen IMAP-Client) geöffnet wird. Daher kann imap_num_recent() in Umgebungen mit mehreren gleichzeitigen Verbindungen 0 zurückgeben, obwohl ungelesene Nachrichten vorhanden sind. Für zuverlässigeres Zählen ungelesener Nachrichten sollte imap_search($imap, 'UNSEEN') bevorzugt werden.

Ab PHP 8.1 erwartet die Funktion ein IMAP\Connection-Objekt anstelle einer Ressource. Der frühere Ressourcentyp ist seit PHP 8.1 veraltet und wurde in PHP 8.2 entfernt.