Signatur
Beschreibung
mailparse_msg_extract_part extrahiert einen einzelnen Teil einer geparsten MIME-E-Mail-Nachricht direkt aus dem übergebenen Nachrichtentext ($msgbody). Die Funktion dekodiert den Inhalt automatisch entsprechend der im MIME-Header angegebenen Kodierung (z. B. quoted-printable oder base64).
Im Gegensatz zu mailparse_msg_extract_part_file, die eine Datei liest, arbeitet diese Funktion mit einem bereits im Speicher befindlichen String. Das ist sinnvoll, wenn die E-Mail-Nachricht zuvor als String eingelesen oder über einen Stream bezogen wurde und keine Datei auf dem Dateisystem vorhanden ist.
Der extrahierte und dekodierte Inhalt wird standardmäßig direkt auf die Ausgabe geschrieben. Durch Übergabe einer optionalen Callback-Funktion kann der Inhalt stattdessen chunk-weise verarbeitet werden, ohne ihn vollständig in den Speicher zu laden – nützlich bei großen Anhängen oder Nachrichtenteilen.
Um gezielt einzelne Teile einer mehrteiligen MIME-Nachricht zu extrahieren, wird üblicherweise zunächst mit mailparse_msg_get_structure die Struktur ermittelt und anschließend mit mailparse_msg_get_part ein Teilressourcen-Handle für den gewünschten Abschnitt erzeugt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $mimemail Pflicht | resource | Ein MIME-E-Mail-Ressource-Handle, das mit mailparse_msg_create oder mailparse_msg_parse bzw. mailparse_msg_get_part erzeugt wurde. |
|
| $msgbody Pflicht | string | Der vollständige Nachrichtentext der E-Mail als String, aus dem der Abschnitt extrahiert werden soll. | |
| $callbackfunc | callable|null | null | Optionale Callback-Funktion, die chunk-weise mit dem dekodiertem Inhalt aufgerufen wird. Wird null oder kein Wert übergeben, wird der Inhalt direkt auf die Standardausgabe geschrieben. Die Callback-Funktion erhält einen String-Parameter mit dem jeweiligen Datenchunk. |
Rückgabewert
Beispiele
Textinhalt einer E-Mail extrahieren und ausgeben
<?php
// Rohe E-Mail-Nachricht als String
$rawEmail = file_get_contents('/var/mail/beispiel.eml');
// MIME-Ressource erzeugen und parsen
$mime = mailparse_msg_create();
mailparse_msg_parse($mime, $rawEmail);
// Struktur der Nachricht ermitteln
$structure = mailparse_msg_get_structure($mime);
echo "Gefundene Teile: " . implode(', ', $structure) . "\n";
// Ersten Teil (z. B. '1') extrahieren
$part = mailparse_msg_get_part($mime, '1');
$partData = mailparse_msg_get_part_data($part);
echo "Content-Type: " . $partData['content-type'] . "\n";
echo "Inhalt:\n";
// Inhalt direkt ausgeben (kein Callback)
mailparse_msg_extract_part($part, $rawEmail);
mailparse_msg_free($mime);
Inhalt via Callback in Variable sammeln
<?php
$rawEmail = file_get_contents('/var/mail/beispiel.eml');
$mime = mailparse_msg_create();
mailparse_msg_parse($mime, $rawEmail);
$structure = mailparse_msg_get_structure($mime);
// Inhalt chunk-weise in einer Variable sammeln
$collectedContent = '';
foreach ($structure as $partId) {
$part = mailparse_msg_get_part($mime, $partId);
$partData = mailparse_msg_get_part_data($part);
if ($partData['content-type'] === 'text/html') {
mailparse_msg_extract_part($part, $rawEmail, function (string $chunk) use (&$collectedContent) {
$collectedContent .= $chunk;
});
break;
}
}
mailparse_msg_free($mime);
echo "HTML-Inhalt der Länge: " . strlen($collectedContent) . " Bytes\n";
echo htmlspecialchars(substr($collectedContent, 0, 100));
// Wichtig · Fallstricke
PECL-Erweiterung: mailparse_msg_extract_part ist Teil der PECL-Erweiterung mailparse, die separat installiert werden muss (pecl install mailparse). Sie ist nicht im PHP-Kern enthalten.
Sicherheit: Inhalte aus E-Mails sollten vor der Ausgabe im Browser stets mit htmlspecialchars oder einem geeigneten HTML-Purifier bereinigt werden, um Cross-Site-Scripting (XSS) zu verhindern. Dateianhänge sollten vor dem Speichern auf dem Server auf Typ und Größe geprüft werden.
Standardausgabe: Ohne Callback-Funktion schreibt die Funktion den Inhalt direkt auf stdout. Bei Web-Anwendungen kann das unerwünschte Ausgaben im HTTP-Response verursachen. Es empfiehlt sich daher, stets eine Callback-Funktion zu übergeben.