Start · Sprachen · PHP · Referenz · imap_setflag_full

imap_setflag_full

Funktion

Setzt eines oder mehrere IMAP-Nachrichtenflags für eine Nachrichtensequenz auf dem Mailserver.

seit PHP 4.0.0 Kategorie: http

Signatur

imap_setflag_full(IMAP\Connection $imap, string $sequence, string $flag, int $options = 0): true

Beschreibung

imap_setflag_full setzt die angegebenen Flags (z. B. \Seen, \Flagged, \Deleted) für eine Gruppe von Nachrichten, die über eine Sequenzangabe identifiziert werden. Die Sequenz kann einzelne Nachrichtennummern, Bereiche (z. B. 1:10) oder kommagetrennte Listen sein.

Die Flags entsprechen dem IMAP-Standard (RFC 3501) und steuern den Status einer Nachricht im Postfach. Typische Anwendungsfälle sind das Markieren von Nachrichten als gelesen (\Seen), als zu löschende (\Deleted) oder als wichtig (\Flagged). Mehrere Flags können als leerzeichen-getrennte Zeichenkette übergeben werden.

Über den Parameter $options kann gesteuert werden, ob die Sequenz als UID-Sequenz (mit ST_UID) oder als klassische Nachrichtensequenznummer interpretiert wird. Um gesetzte Flags wieder zu entfernen, steht die Gegenfunktion imap_clearflag_full zur Verfügung.

Zu beachten ist, dass das Setzen des Flags \Deleted eine Nachricht nur als zu löschend markiert – zum endgültigen Löschen muss anschließend imap_expunge aufgerufen werden.

Parameter

Name Typ Default Beschreibung
$imap Pflicht IMAP\Connection Eine IMAP-Verbindungsinstanz, die zuvor mit imap_open geöffnet wurde.
$sequence Pflicht string Eine Nachrichtensequenz, z. B. "1", "1:5" oder "1,3,5". Bei Verwendung von ST_UID als Option werden UIDs statt Sequenznummern verwendet.
$flag Pflicht string Ein oder mehrere IMAP-Flags, leerzeichen-getrennt. Gültige Werte sind \Seen, \Answered, \Flagged, \Deleted und \Draft.
$options int 0 Optionales Bitfeld. ST_UID bewirkt, dass $sequence als UID-Sequenz statt als Nachrichtensequenznummer interpretiert wird.

Rückgabewert

Typ
true
Beschreibung
Gibt immer true zurück. Bei einem Fehler wird seit PHP 8.0 eine ValueError-Exception geworfen.

Beispiele

Nachrichten als gelesen markieren

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

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

// Nachrichten 1 bis 5 als gelesen markieren
imap_setflag_full($imap, '1:5', '\\Seen');

echo 'Nachrichten 1-5 wurden als gelesen markiert.' . PHP_EOL;

imap_close($imap);
?>
Nachrichten 1-5 wurden als gelesen markiert.

Nachricht per UID als wichtig markieren und zum Löschen vormerken

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

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

$uid = 1042; // Bekannte UID der Nachricht

// Als wichtig markieren (Flagged) mittels UID
imap_setflag_full($imap, (string)$uid, '\\Flagged', ST_UID);
echo 'Nachricht als wichtig markiert.' . PHP_EOL;

// Nachricht zum Löschen vormerken
imap_setflag_full($imap, (string)$uid, '\\Deleted', ST_UID);
echo 'Nachricht zum Löschen vorgemerkt.' . PHP_EOL;

// Gelöschte Nachrichten endgültig entfernen
imap_expunge($imap);
echo 'Postfach bereinigt.' . PHP_EOL;

imap_close($imap);
?>
Nachricht als wichtig markiert. Nachricht zum Löschen vorgemerkt. Postfach bereinigt.

// Wichtig · Fallstricke

Backslash-Escaping: IMAP-Flags beginnen mit einem Backslash (z. B. \Seen). Da der Backslash in PHP-Strings ein Sonderzeichen ist, muss er im Quellcode verdoppelt werden: '\\Seen'.

Löschen erfordert Expunge: Das Setzen des Flags \Deleted löscht eine Nachricht nicht sofort. Es ist zwingend erforderlich, danach imap_expunge aufzurufen oder die Verbindung mit dem Flag CL_EXPUNGE zu schließen.

Erweiterung: Die IMAP-Erweiterung ist ab PHP 8.4 als PECL-Paket ausgelagert und muss separat installiert werden. In älteren PHP-Versionen ist sie Teil des Core-Distributions.

Serverkompatibilität: Nicht alle IMAP-Server unterstützen benutzerdefinierte Flags (Keywords). Die Standard-System-Flags gemäß RFC 3501 werden jedoch von allen kompatiblen Servern unterstützt.