Signatur
Beschreibung
imap_close() beendet eine zuvor mit imap_open() geöffnete IMAP-Verbindung. Die Funktion schließt den Stream ordnungsgemäß und gibt den belegten Speicher frei. Sie sollte am Ende jedes Skripts aufgerufen werden, das eine IMAP-Verbindung nutzt, um Ressourcen-Lecks zu vermeiden.
Über den optionalen Parameter flags kann gesteuert werden, ob während der Sitzung als gelöscht markierte Nachrichten (\Deleted) beim Schließen endgültig vom Server entfernt werden sollen. Dazu wird die Konstante CL_EXPUNGE übergeben. Ohne dieses Flag verbleiben als gelöscht markierte Nachrichten im Postfach, bis explizit imap_expunge() aufgerufen oder die Verbindung mit CL_EXPUNGE geschlossen wird.
Ab PHP 8.1 wurde der Typ des ersten Parameters von der veralteten Ressource resource auf das neue Klassen-Objekt IMAP\Connection umgestellt. Skripte, die noch mit dem alten Ressource-Typ arbeiten, müssen entsprechend angepasst werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $imap Pflicht | IMAP\Connection | Eine aktive IMAP-Verbindung, die zuvor mit imap_open() geöffnet wurde. Ab PHP 8.1 ist dies ein IMAP\Connection-Objekt (vorher: resource). |
|
| $flags | int | 0 | Optionale Flags. Mit CL_EXPUNGE werden beim Schließen alle als gelöscht markierten Nachrichten endgültig vom Server entfernt (entspricht einem Aufruf von imap_expunge() vor dem Schließen). |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. wenn die übergebene Verbindung ungültig ist).Beispiele
Einfaches Öffnen und Schließen einer IMAP-Verbindung
<?php
$imap = imap_open(
'{imap.example.com:993/imap/ssl}INBOX',
'benutzer@example.com',
'geheimesPasswort'
);
if ($imap === false) {
die('Verbindung fehlgeschlagen: ' . imap_last_error());
}
// E-Mails verarbeiten ...
$anzahl = imap_num_msg($imap);
echo "Anzahl Nachrichten: $anzahl" . PHP_EOL;
// Verbindung sauber schließen
imap_close($imap);
?>
Verbindung schließen und als gelöscht markierte Nachrichten endgültig entfernen
<?php
$imap = imap_open(
'{imap.example.com:993/imap/ssl}INBOX',
'benutzer@example.com',
'geheimesPasswort'
);
if ($imap === false) {
die('Verbindung fehlgeschlagen: ' . imap_last_error());
}
// Erste Nachricht als gelöscht markieren
imap_delete($imap, 1);
// Verbindung schließen und gleichzeitig alle markierten Nachrichten entfernen
$ergebnis = imap_close($imap, CL_EXPUNGE);
if ($ergebnis) {
echo 'Verbindung geschlossen, gelöschte Nachrichten wurden endgültig entfernt.';
} else {
echo 'Fehler beim Schließen der Verbindung.';
}
?>
// Wichtig · Fallstricke
Ressource vs. Objekt: Ab PHP 8.1 liefert imap_open() ein IMAP\Connection-Objekt zurück. Die Übergabe einer alten resource an imap_close() führt in PHP 8.1+ zu einem TypeError. Bestehender Code sollte entsprechend geprüft werden.
CL_EXPUNGE mit Bedacht einsetzen: Das endgültige Löschen von Nachrichten mit CL_EXPUNGE kann nicht rückgängig gemacht werden. Stellen Sie sicher, dass nur die gewünschten Nachrichten zuvor mit imap_delete() markiert wurden.
IMAP-Extension: Die IMAP-Erweiterung ist nicht in allen PHP-Installationen standardmäßig aktiviert. Sie muss ggf. über die PHP-Konfiguration aktiviert oder nachinstalliert werden (z. B. php-imap Paket).