Signatur
Beschreibung
mailparse_msg_get_part_data() liest die strukturierten Informationen eines einzelnen MIME-Teils (Part) aus einer geparsten E-Mail-Nachricht aus. Der Rückgabewert ist ein assoziatives Array, das Headerfelder, Kodierung, Zeichensatz, Content-Type und weitere Metadaten des jeweiligen Nachrichtenteils enthält.
Typischerweise wird die Funktion nach mailparse_msg_parse() oder mailparse_msg_parse_file() aufgerufen, um Details zu einem bestimmten Teil der Nachricht zu inspizieren. Mithilfe von mailparse_msg_get_structure() erhält man zunächst eine Liste aller Teilbezeichner, über die dann mit mailparse_msg_get_part() der jeweilige Ressourcen-Handle ermittelt wird, den man dann an mailparse_msg_get_part_data() übergibt.
Das zurückgegebene Array enthält unter anderem die Schlüssel content-type, content-transfer-encoding, charset, headers sowie Angaben zu Startpositionen und Längen des Inhalts innerhalb der Rohdaten. Damit lassen sich z. B. Anhänge identifizieren, Textkörper extrahieren oder Headerfelder wie From, To und Subject gezielt auslesen.
Die Funktion gehört zur mailparse-PECL-Erweiterung und ist besonders dann sinnvoll, wenn E-Mails serverseitig verarbeitet, archiviert oder analysiert werden sollen, ohne auf externe E-Mail-Bibliotheken angewiesen zu sein.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $mimemail Pflicht | resource | Eine MIME-Mail-Ressource, die zuvor mit mailparse_msg_create() und mailparse_msg_parse() oder mit mailparse_msg_get_part() erzeugt wurde. |
Rückgabewert
content-type, content-transfer-encoding, charset, headers (selbst ein Array aller Headerzeilen), starting-pos, starting-pos-body, ending-pos, ending-pos-body und line-count.Beispiele
Metadaten aller MIME-Teile einer E-Mail ausgeben
<?php
// Rohe E-Mail-Nachricht (vereinfachtes Beispiel)
$rawEmail = "From: sender@example.com\r\n"
. "To: recipient@example.com\r\n"
. "Subject: Testmail\r\n"
. "MIME-Version: 1.0\r\n"
. "Content-Type: text/plain; charset=UTF-8\r\n"
. "\r\n"
. "Hallo Welt!";
// MIME-Ressource erzeugen und Nachricht parsen
$mail = mailparse_msg_create();
mailparse_msg_parse($mail, $rawEmail);
// Struktur der Nachricht ermitteln
$structure = mailparse_msg_get_structure($mail);
foreach ($structure as $partId) {
$part = mailparse_msg_get_part($mail, $partId);
$data = mailparse_msg_get_part_data($part);
echo "Teil: $partId\n";
echo "Content-Type: " . ($data['content-type'] ?? 'unbekannt') . "\n";
echo "Charset: " . ($data['charset'] ?? 'unbekannt') . "\n";
echo "Encoding: " . ($data['transfer-encoding'] ?? 'unbekannt') . "\n";
echo "---\n";
}
mailparse_msg_free($mail);
?>
Headerfelder eines bestimmten MIME-Teils auslesen
<?php
$rawEmail = file_get_contents('/var/mail/beispiel.eml');
$mail = mailparse_msg_create();
mailparse_msg_parse($mail, $rawEmail);
// Ersten Teil (gesamte Nachricht) analysieren
$part = mailparse_msg_get_part($mail, '1');
$data = mailparse_msg_get_part_data($part);
// Headerfelder auslesen
$headers = $data['headers'] ?? [];
echo "Von: " . ($headers['from'] ?? '-') . "\n";
echo "An: " . ($headers['to'] ?? '-') . "\n";
echo "Betreff: " . ($headers['subject'] ?? '-') . "\n";
mailparse_msg_free($mail);
?>
// Wichtig · Fallstricke
PECL-Erweiterung erforderlich: mailparse ist keine eingebaute PHP-Erweiterung und muss separat installiert werden (pecl install mailparse). Ohne diese Erweiterung ist die Funktion nicht verfügbar.
Ressourcen freigeben: Nach der Verarbeitung sollte die MIME-Ressource mit mailparse_msg_free() freigegeben werden, um Speicherlecks zu vermeiden.
Schlüsselnamen: Die Schlüssel im Rückgabe-Array können je nach PHP- und mailparse-Version leicht variieren (z. B. transfer-encoding vs. content-transfer-encoding). Eigene Ausgaben sollten daher stets mit var_dump() oder print_r() geprüft werden.