Start · Sprachen · PHP · Referenz · mailparse_msg_extract_part

mailparse_msg_extract_part

Funktion

Extrahiert und dekodiert einen bestimmten Abschnitt (Part) einer MIME-E-Mail-Nachricht aus einem übergebenen String.

seit PHP 4.1.0 Kategorie: http

Signatur

mailparse_msg_extract_part(resource $mimemail, string $msgbody, callable|null $callbackfunc = null): void

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

Typ
void
Beschreibung
Gibt keinen Rückgabewert zurück. Der extrahierte Inhalt wird entweder über die Callback-Funktion verarbeitet oder direkt ausgegeben.

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);
Gefundene Teile: 1, 2 Content-Type: text/plain Inhalt: Hallo Welt! Dies ist der Textinhalt der E-Mail.

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));
HTML-Inhalt der Länge: 342 Bytes &lt;html&gt;&lt;body&gt;&lt;p&gt;Hallo Welt!&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;

// 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.