Signatur
Beschreibung
mailparse_msg_extract_whole_part_file liest einen bestimmten Abschnitt (Part) einer geparsten MIME-E-Mail-Nachricht heraus und gibt dabei sowohl die Header als auch den Rumpf des Abschnitts in ihrer ursprünglichen, nicht dekodierenden Form zurück. Im Gegensatz zu mailparse_msg_extract_part_file wird der Inhalt nicht entschlüsselt oder dekodiert (z. B. kein Base64- oder Quoted-Printable-Decoding).
Die Funktion ist nützlich, wenn man den rohen Abschnittsinhalt weiterverarbeiten oder als vollständige MIME-Einheit an ein anderes System weitergeben möchte, z. B. beim Weiterleiten einzelner Anhänge oder verschachtelter Nachrichten ohne Datenverlust. Der optionale Callback erlaubt es, die extrahierten Daten stückweise zu verarbeiten, anstatt alles in den Arbeitsspeicher zu laden.
Wird kein Callback angegeben, so wird der extrahierte Inhalt als string zurückgegeben. Wird ein Callable übergeben, so erhält dieser die Daten-Chunks übergeben und die Funktion gibt true zurück. Die Funktion setzt die PECL-Extension mailparse voraus.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $mimemail Pflicht | resource | Eine gültige MIME-E-Mail-Ressource, wie sie von mailparse_msg_create oder mailparse_msg_parse_file zurückgegeben wird. |
|
| $section Pflicht | array | Ein assoziatives Array, das den zu extrahierenden Abschnitt der MIME-Nachricht beschreibt. Solche Arrays erhält man typischerweise über mailparse_msg_get_structure und anschließend mailparse_msg_get_part_data. |
|
| $callbackfunc | mixed | null | Ein optionales Callable, das für jeden extrahierten Datenchunk aufgerufen wird. Ist null oder nicht angegeben, wird der gesamte Inhalt als String zurückgegeben. Wird ein leerer String "" übergeben, schreibt die Funktion die Daten direkt in den Ausgabepuffer (echo-Äquivalent). |
Rückgabewert
string zurück, wenn kein Callback angegeben wurde. Bei Verwendung eines Callbacks wird true zurückgegeben. Im Fehlerfall wird false zurückgegeben.Beispiele
Rohen MIME-Teil inklusive Header extrahieren
<?php
// E-Mail-Datei einlesen und parsen
$mailfile = '/pfad/zur/email.eml';
$msg = mailparse_msg_parse_file($mailfile);
if (!$msg) {
die('Fehler beim Parsen der Nachricht.');
}
// Struktur der Nachricht abrufen
$structure = mailparse_msg_get_structure($msg);
foreach ($structure as $partId) {
$part = mailparse_msg_get_part($msg, $partId);
$partData = mailparse_msg_get_part_data($part);
// Rohen Teil inklusive Header (undekodiert) extrahieren
$raw = mailparse_msg_extract_whole_part_file($part, $partData);
echo "=== Part: $partId ===\n";
echo $raw;
echo "\n";
}
mailparse_msg_free($msg);
Rohen MIME-Teil mit Callback verarbeiten
<?php
$mailfile = '/pfad/zur/email.eml';
$msg = mailparse_msg_parse_file($mailfile);
$structure = mailparse_msg_get_structure($msg);
$partId = $structure[0]; // Ersten Teil extrahieren
$part = mailparse_msg_get_part($msg, $partId);
$partData = mailparse_msg_get_part_data($part);
// Callback: Chunks in eine Datei schreiben
$outputFile = fopen('/tmp/extracted_part.eml', 'wb');
mailparse_msg_extract_whole_part_file(
$part,
$partData,
function (string $chunk) use ($outputFile): void {
fwrite($outputFile, $chunk);
}
);
fclose($outputFile);
mailparse_msg_free($msg);
echo 'Abschnitt gespeichert.';
// Wichtig · Fallstricke
PECL-Abhängigkeit: Diese Funktion ist Teil der mailparse-PECL-Extension und steht nicht standardmäßig in PHP zur Verfügung. Sie muss separat installiert und aktiviert werden (pecl install mailparse).
Kein Decoding: Da der Inhalt undekodiert zurückgegeben wird (kein Base64- oder Quoted-Printable-Decoding), eignet sich diese Funktion nicht, wenn der lesbare Klartext oder die entschlüsselten Binärdaten eines Anhangs benötigt werden. Für dekodierte Inhalte sollte stattdessen mailparse_msg_extract_part_file verwendet werden.
Ressourcen-Management: Vergesse nicht, die MIME-Ressource nach der Verarbeitung mit mailparse_msg_free freizugeben, um Speicherlecks zu vermeiden.