Start · Sprachen · PHP · Referenz · mailparse_msg_get_part

mailparse_msg_get_part

Funktion

Gibt ein Handle auf einen bestimmten Abschnitt (Part) einer geparsten MIME-Nachricht zurück.

Kategorie: http

Signatur

mailparse_msg_get_part(resource $rfc2822msg, string $mimesection): resource

Beschreibung

mailparse_msg_get_part ermöglicht den gezielten Zugriff auf einen einzelnen Abschnitt einer mehrteiligen MIME-Nachricht, die zuvor mit mailparse_msg_create oder mailparse_msg_parse_file geparst wurde. Der gewünschte Abschnitt wird über eine Abschnittsbezeichnung in Punkt-Notation adressiert, wie sie die MIME-Hierarchie widerspiegelt.

Das zurückgegebene Handle ist eine Ressource, die mit weiteren Mailparse-Funktionen wie mailparse_msg_get_part_data verwendet werden kann, um Metadaten des Abschnitts (z. B. Content-Type, Zeichensatz, Encoding) abzurufen oder um den Body-Inhalt zu extrahieren.

Typische Abschnittsbezeichnungen sind 1 für den ersten Teil einer Nachricht, 1.1 für den ersten Unterabschnitt des ersten Teils usw. Der Abschnitt 1 entspricht häufig dem Textteil einer einfachen Nachricht, während bei Multipart-Nachrichten die Teile mit 1, 2, 3 etc. durchnummeriert sind.

Diese Funktion ist Teil der PECL-Erweiterung mailparse und ist daher nur verfügbar, wenn diese Erweiterung installiert und aktiviert ist. Sie eignet sich besonders für Anwendungen, die eingehende E-Mails verarbeiten, z. B. Support-Systeme, Mailing-Listen-Software oder E-Mail-Parser.

Parameter

Name Typ Default Beschreibung
$rfc2822msg Pflicht resource Eine MIME-Nachrichten-Ressource, die zuvor mit mailparse_msg_create oder mailparse_msg_parse_file erstellt wurde.
$mimesection Pflicht string Die Bezeichnung des gewünschten MIME-Abschnitts in Punkt-Notation, z. B. 1, 1.1 oder 2.

Rückgabewert

Typ
resource
Beschreibung
Gibt eine Ressource zurück, die den angeforderten MIME-Abschnitt repräsentiert. Diese Ressource kann mit mailparse_msg_get_part_data oder mailparse_msg_extract_part weiterverwendet werden. Bei einem Fehler oder einem nicht existierenden Abschnitt wird false zurückgegeben.

Beispiele

Ersten MIME-Part einer E-Mail auslesen

<?php
// E-Mail-Datei parsen
$msg = mailparse_msg_parse_file('/pfad/zur/email.eml');

if ($msg === false) {
    die('Konnte E-Mail nicht parsen.');
}

// Handle auf den ersten MIME-Abschnitt holen
$part = mailparse_msg_get_part($msg, '1');

if ($part === false) {
    die('Abschnitt nicht gefunden.');
}

// Metadaten des Abschnitts abrufen
$data = mailparse_msg_get_part_data($part);
print_r($data);

// Ressource freigeben
mailparse_msg_free($msg);
?>
Array ( [index] => 1 [content-type] => text/plain [charset] => utf-8 [transfer-encoding] => quoted-printable [starting-pos] => 412 [ending-pos] => 850 ... )

Inhalt eines verschachtelten Multipart-Abschnitts extrahieren

<?php
// Rohe E-Mail-Daten
$rawEmail = file_get_contents('/pfad/zur/multipart-email.eml');

$msg = mailparse_msg_create();
mailparse_msg_parse($msg, $rawEmail);

// Zweiten Unterabschnitt des ersten Teils holen (z. B. HTML-Part)
$htmlPart = mailparse_msg_get_part($msg, '1.2');

if ($htmlPart !== false) {
    $partData = mailparse_msg_get_part_data($htmlPart);
    echo 'Content-Type: ' . $partData['content-type'] . PHP_EOL;

    // Inhalt direkt ausgeben
    mailparse_msg_extract_part($htmlPart, $rawEmail, function($body) {
        echo $body;
    });
} else {
    echo 'Abschnitt 1.2 nicht vorhanden.';
}

mailparse_msg_free($msg);
?>
Content-Type: text/html <html><body><p>Hallo Welt!</p></body></html>

// Wichtig · Fallstricke

PECL-Abhängigkeit: mailparse_msg_get_part ist Teil der PECL-Erweiterung mailparse, die separat installiert werden muss (pecl install mailparse). Sie ist nicht im PHP-Kern enthalten.

Abschnittsnummerierung: Die Abschnittsbezeichnungen folgen dem IMAP-Standard (RFC 2060). Bei einfachen, nicht-Multipart-Nachrichten lautet der einzige Abschnitt typischerweise 1. Falsche Bezeichner führen zu einem Rückgabewert von false.

Speicherverwaltung: Die mit mailparse_msg_create erstellten Ressourcen sollten nach Verwendung mit mailparse_msg_free freigegeben werden, um Speicherlecks zu vermeiden. Part-Ressourcen müssen dabei nicht separat freigegeben werden.