Signatur
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
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);
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);
// 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()).