Start · Sprachen · PHP · Referenz · mailparse_msg_parse_file

mailparse_msg_parse_file

Funktion

Öffnet und parst eine E-Mail-Datei und gibt ein MIME-Nachrichten-Handle zurück.

Kategorie: http

Signatur

mailparse_msg_parse_file(string $filename): resource|false

Beschreibung

mailparse_msg_parse_file() liest eine E-Mail-Datei vom Dateisystem, parst deren MIME-Struktur vollständig und gibt eine Ressource zurück, die die geparste Nachricht repräsentiert. Diese Ressource kann anschließend mit weiteren mailparse_*-Funktionen ausgewertet werden, z. B. mit mailparse_msg_get_structure(), um die MIME-Teile zu ermitteln, oder mit mailparse_msg_get_part_data(), um Metadaten zu einzelnen Teilen zu lesen.

Die Funktion ist die bequemste Methode, wenn die gesamte E-Mail bereits als Datei vorliegt (z. B. aus einem Maildir oder als gespeicherte .eml-Datei), da sie das Öffnen der Datei, das Erzeugen eines Nachrichten-Handles (mailparse_msg_create()) und das eigentliche Parsen (mailparse_msg_parse()) in einem einzigen Aufruf zusammenfasst.

Das zurückgegebene Handle muss nach der Verwendung mit mailparse_msg_free() freigegeben werden, um Speicherlecks zu vermeiden. Die Funktion gehört zur PECL mailparse-Erweiterung und ist nicht im PHP-Standardumfang enthalten.

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Absoluter oder relativer Pfad zu der zu parsenden E-Mail-Datei im RFC 2822-Format (.eml, Maildir-Nachricht usw.).

Rückgabewert

Typ
resource|false
Beschreibung
Gibt im Erfolgsfall eine Mailparse-Ressource zurück, die die vollständig geparste MIME-Nachricht repräsentiert. Bei einem Fehler (Datei nicht lesbar, ungültiger Pfad) wird false zurückgegeben.

Beispiele

MIME-Struktur einer EML-Datei ausgeben

<?php
// E-Mail-Datei parsen
$resource = mailparse_msg_parse_file('/var/mail/beispiel.eml');

if ($resource === false) {
    die('Datei konnte nicht geparst werden.');
}

// Alle MIME-Teile der Nachricht ermitteln
$structure = mailparse_msg_get_structure($resource);
print_r($structure);

// Ressource freigeben
mailparse_msg_free($resource);
Array ( [0] => 1 [1] => 1.1 [2] => 1.2 )

Betreff und Absender einer E-Mail auslesen

<?php
$file = '/var/mail/testmail.eml';
$resource = mailparse_msg_parse_file($file);

if ($resource === false) {
    die('Fehler beim Parsen der Datei: ' . $file);
}

// Daten des Wurzel-MIME-Teils holen
$partData = mailparse_msg_get_part_data($resource);

echo 'Von:     ' . ($partData['headers']['from'] ?? 'unbekannt') . PHP_EOL;
echo 'An:      ' . ($partData['headers']['to']   ?? 'unbekannt') . PHP_EOL;
echo 'Betreff: ' . ($partData['headers']['subject'] ?? '(kein Betreff)') . PHP_EOL;

mailparse_msg_free($resource);
Von: absender@example.com An: empfaenger@example.com Betreff: Testmail mit Anhang

// Wichtig · Fallstricke

Erweiterung erforderlich: Die Funktion ist Teil der PECL-Erweiterung mailparse. Sie muss separat installiert und in der php.ini aktiviert werden (extension=mailparse).

Speicherverwaltung: Das zurückgegebene Handle ist eine native Ressource. Wird mailparse_msg_free() vergessen, entstehen Speicherlecks – besonders kritisch in langlaufenden Prozessen oder beim Verarbeiten großer Mengen von E-Mails.

Sicherheit: Der übergebene Dateipfad sollte niemals direkt aus Benutzereingaben stammen. Validieren und sanitisieren Sie Pfade sorgfältig, um Path-Traversal-Angriffe (../../etc/passwd) zu verhindern. Prüfen Sie außerdem, ob die Datei wirklich innerhalb des erlaubten Verzeichnisses liegt (z. B. mit realpath()).