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