Start · Sprachen · PHP · Referenz · mailparse_msg_parse

mailparse_msg_parse

Funktion

Parst eine E-Mail-Nachricht inkrementell in einen bestehenden MIME-Puffer (Ressource).

seit PHP 5.0.0 Kategorie: http

Signatur

mailparse_msg_parse(resource $mimemail, string $data): bool

Beschreibung

mailparse_msg_parse übergibt einen String mit E-Mail-Rohdaten an eine zuvor erzeugte MIME-Ressource und parst diesen Datenblock inkrementell. Die Funktion ist Teil der PECL-Erweiterung mailparse und ermöglicht es, große E-Mails stückweise (chunk-weise) zu verarbeiten, ohne den gesamten Inhalt auf einmal in den Speicher laden zu müssen.

Typischerweise wird die MIME-Ressource zuerst mit mailparse_msg_create() angelegt. Anschließend kann mailparse_msg_parse beliebig oft aufgerufen werden, um weitere Datenblöcke nachzuladen – das ist besonders nützlich beim Lesen aus einem Stream oder einer Datei in Schleifen.

Nach dem vollständigen Parsen können die MIME-Strukturen und Attachments über Funktionen wie mailparse_msg_get_structure() oder mailparse_msg_get_part_data() abgefragt werden. Am Ende sollte die Ressource mit mailparse_msg_free() freigegeben werden, um Speicherlecks zu vermeiden.

  • Geeignet für große E-Mails, die nicht komplett in den RAM passen.
  • Kann mehrfach mit verschiedenen Datenblöcken aufgerufen werden.
  • Gibt im Fehlerfall false zurück.

Parameter

Name Typ Default Beschreibung
$mimemail Pflicht resource Eine gültige MIME-Mail-Ressource, die zuvor mit mailparse_msg_create() oder mailparse_msg_parse_file() erzeugt wurde.
$data Pflicht string Ein String mit den zu parsenden E-Mail-Rohdaten (kann ein vollständiges E-Mail-Dokument oder ein Teilblock davon sein).

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Daten erfolgreich geparst wurden. Bei einem Fehler (z. B. ungültige Ressource oder Parsing-Fehler) wird false zurückgegeben.

Beispiele

Komplette E-Mail in einen MIME-Puffer parsen

<?php
// Rohe E-Mail-Daten (z. B. aus einer Datei oder einem IMAP-Stream)
$rawEmail = "From: sender@example.com\r\n"
          . "To: recipient@example.com\r\n"
          . "Subject: Testmail\r\n"
          . "MIME-Version: 1.0\r\n"
          . "Content-Type: text/plain; charset=UTF-8\r\n"
          . "\r\n"
          . "Hallo, das ist ein Testinhalt.";

// MIME-Ressource erzeugen
$mime = mailparse_msg_create();

// Daten parsen
if (mailparse_msg_parse($mime, $rawEmail)) {
    // Struktur der geparsten Nachricht ausgeben
    $structure = mailparse_msg_get_structure($mime);
    print_r($structure);

    // Daten des Haupt-Parts abrufen
    $part = mailparse_msg_get_part($mime, '1');
    $partData = mailparse_msg_get_part_data($part);
    echo "Content-Type: " . $partData['content-type'] . "\n";
} else {
    echo "Fehler beim Parsen der E-Mail.";
}

// Ressource freigeben
mailparse_msg_free($mime);
Array ( [0] => 1 ) Content-Type: text/plain

Große E-Mail inkrementell chunk-weise parsen

<?php
$emailFile = '/var/mail/example.eml';
$chunkSize = 8192; // 8 KB pro Block

$mime = mailparse_msg_create();

$fp = fopen($emailFile, 'r');
if ($fp) {
    while (!feof($fp)) {
        $chunk = fread($fp, $chunkSize);
        if ($chunk === false) {
            break;
        }
        if (!mailparse_msg_parse($mime, $chunk)) {
            echo "Fehler beim inkrementellen Parsen.";
            break;
        }
    }
    fclose($fp);

    // Geparste Struktur auswerten
    $structure = mailparse_msg_get_structure($mime);
    echo "Gefundene MIME-Parts: " . count($structure) . "\n";
    print_r($structure);
} else {
    echo "Datei konnte nicht geöffnet werden.";
}

mailparse_msg_free($mime);
Gefundene MIME-Parts: 3 Array ( [0] => 1 [1] => 1.1 [2] => 1.2 )

// Wichtig · Fallstricke

PECL-Erweiterung: mailparse_msg_parse ist Teil der PECL-Erweiterung mailparse und nicht im Standard-PHP enthalten. Die Erweiterung muss separat installiert und in der php.ini aktiviert werden (extension=mailparse).

Ressource-Verwaltung: Die mit mailparse_msg_create() erzeugte Ressource muss nach der Nutzung immer mit mailparse_msg_free() freigegeben werden, um Speicherlecks zu vermeiden — besonders wichtig bei der Verarbeitung vieler E-Mails in einer Schleife.

Inkrementelles Parsen: Beim chunk-weisen Parsen muss darauf geachtet werden, dass die Datenblöcke vollständige Zeilengrenzen respektieren (\r\n), um Parsing-Fehler bei MIME-Headern zu vermeiden.