Signatur
Beschreibung
imap_mail_copy() kopiert die angegebenen Nachrichten aus dem aktuell geöffneten IMAP-Postfach in das Ziel-Postfach $mailbox. Die Nachrichten verbleiben dabei im Quell-Postfach; es handelt sich um eine echte Kopieroperation, nicht um ein Verschieben.
Die zu kopierenden Nachrichten werden über $message_nums angegeben, entweder als einzelne Sequenznummer ('1'), als kommagetrennte Liste ('1,3,5') oder als Bereich ('1:5'). Mit dem Flag CP_UID können statt Sequenznummern UIDs verwendet werden, was robuster gegenüber Postfach-Veränderungen ist.
Um Nachrichten zu verschieben, sollte nach imap_mail_copy() die Funktion imap_mail_move() oder eine Kombination aus imap_mail_copy() und imap_delete() mit anschließendem imap_expunge() eingesetzt werden.
Hinweis: Diese Funktion gehört zur IMAP-Erweiterung. Ab PHP 8.1 wird die IMAP-Verbindung durch das Objekt IMAP\Connection repräsentiert; in früheren Versionen war es eine Ressource.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $imap Pflicht | IMAP\Connection | Eine geöffnete IMAP-Verbindung, wie sie von imap_open() zurückgegeben wird. |
|
| $message_nums Pflicht | string | Die Nachrichtennummer(n) als Zeichenkette. Einzelne Nummer ('3'), kommagetrennte Liste ('1,3,7') oder Bereich ('1:10') sind möglich. Bei gesetztem Flag CP_UID werden UIDs statt Sequenznummern erwartet. |
|
| $mailbox Pflicht | string | Der Name des Ziel-Postfachs, z. B. 'INBOX.Archiv' oder in vollständiger IMAP-Schreibweise '{imap.example.com}Archiv'. |
|
| $flags | int | 0 | Optionale Flags. CP_UID (1): $message_nums enthält UIDs statt Sequenznummern. CP_MOVE (2): Nachrichten werden nach dem Kopieren im Quell-Postfach als gelöscht markiert. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. ungültiger Postfachname oder keine IMAP-Verbindung).Beispiele
Einzelne Nachricht in ein Archiv-Postfach kopieren
<?php
$imap = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'user@example.com', 'geheimes_passwort');
if (!$imap) {
die('Verbindung fehlgeschlagen: ' . imap_last_error());
}
// Nachricht Nr. 3 in das Postfach "Archiv" kopieren
$result = imap_mail_copy($imap, '3', 'Archiv');
if ($result) {
echo "Nachricht erfolgreich kopiert.";
} else {
echo "Fehler beim Kopieren: " . imap_last_error();
}
imap_close($imap);
Mehrere Nachrichten per UID kopieren und Quelle bereinigen
<?php
$imap = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'user@example.com', 'geheimes_passwort');
if (!$imap) {
die('Verbindung fehlgeschlagen: ' . imap_last_error());
}
// UIDs 101, 102 und 105 in "INBOX.Gelesen" kopieren
$uids = '101,102,105';
$result = imap_mail_copy($imap, $uids, 'INBOX.Gelesen', CP_UID);
if ($result) {
// Ursprungsnachrichten als gelöscht markieren
imap_delete($imap, $uids, FT_UID);
// Endgültig löschen (Verschieben-Effekt)
imap_expunge($imap);
echo "Nachrichten verschoben.";
} else {
echo "Fehler: " . imap_last_error();
}
imap_close($imap);
// Wichtig · Fallstricke
Sicherheitshinweis: IMAP-Verbindungsdaten (Passwörter) sollten niemals im Quellcode hardcodiert werden. Nutze Umgebungsvariablen oder sichere Konfigurationsdateien außerhalb des Webroot.
Postfachname: Der Ziel-Postfachname muss exakt dem auf dem Server vorhandenen Namen entsprechen (Groß-/Kleinschreibung beachten). Bei Bedarf können vorhandene Postfächer mit imap_list() aufgelistet werden.
Deprecation: Die IMAP-Erweiterung wurde in PHP 8.4 als veraltet (deprecated) markiert und soll in einer zukünftigen PHP-Version entfernt werden. Für neue Projekte empfiehlt sich der Einsatz einer modernen Bibliothek wie Horde_Imap_Client oder php-imap.
Das Flag CP_MOVE markiert die Quellnachricht nur als gelöscht — sie bleibt sichtbar, bis imap_expunge() aufgerufen wird.