Start · Sprachen · PHP · Referenz · imap_mail_copy

imap_mail_copy

Funktion

Kopiert eine oder mehrere Nachrichten in ein anderes IMAP-Postfach.

seit PHP 4.0.0 Kategorie: http

Signatur

imap_mail_copy(IMAP\Connection $imap, string $message_nums, string $mailbox, int $flags = 0): bool

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

Typ
bool
Beschreibung
Gibt 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);
Nachricht erfolgreich kopiert.

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);
Nachrichten verschoben.

// 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.