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