Signatur
Beschreibung
mailparse_msg_get_structure() liest eine bereits geparste MIME-Nachricht und liefert ein Array mit den Namen aller enthaltenen MIME-Abschnitte (Sections). Diese Abschnittsnamen folgen der hierarchischen MIME-Struktur und werden als Zeichenketten wie "1", "1.1", "1.2" usw. angegeben.
Die Funktion ist besonders hilfreich, wenn man den Aufbau einer E-Mail analysieren möchte, bevor man auf einzelne Teile – etwa Text-Body, HTML-Body oder Anhänge – zugreift. Mit den zurückgegebenen Namen kann man gezielt mailparse_msg_get_part() und mailparse_msg_get_part_data() aufrufen, um Details zu jedem Abschnitt zu ermitteln.
Der Parameter $mimemail muss eine gültige MIME-Ressource sein, die zuvor mit mailparse_msg_create() erzeugt und mit mailparse_msg_parse() oder mailparse_msg_parse_file() befüllt wurde. Die Funktion gehört zur PECL-Erweiterung mailparse, die separat installiert werden muss.
Die Abschnittsnamen entsprechen dem IMAP-Body-Structure-Format (RFC 3501): der Wurzelabschnitt heißt "1", Unterabschnitte werden als "1.1", "1.2" etc. nummeriert – analog zur verschachtelten Struktur von Multipart-Nachrichten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $mimemail Pflicht | resource | Eine gültige MIME-Mail-Ressource, die zuvor mit mailparse_msg_create() erzeugt und geparst wurde. |
Rückgabewert
["1", "1.1", "1.2"]. Bei einer einfachen Nachricht ohne Unterteile enthält das Array nur "1".Beispiele
Struktur einer Multipart-E-Mail ausgeben
<?php
// Rohe E-Mail-Nachricht (vereinfachtes Beispiel)
$rawEmail = "From: sender@example.com\r\n"
. "To: empfaenger@example.com\r\n"
. "MIME-Version: 1.0\r\n"
. "Content-Type: multipart/alternative; boundary=\"BOUNDARY\"\r\n"
. "\r\n"
. "--BOUNDARY\r\n"
. "Content-Type: text/plain; charset=UTF-8\r\n"
. "\r\n"
. "Hallo als Text.\r\n"
. "--BOUNDARY\r\n"
. "Content-Type: text/html; charset=UTF-8\r\n"
. "\r\n"
. "<p>Hallo als HTML.</p>\r\n"
. "--BOUNDARY--\r\n";
// MIME-Ressource erstellen und Nachricht parsen
$mime = mailparse_msg_create();
mailparse_msg_parse($mime, $rawEmail);
// Alle Abschnittsnamen abrufen
$struktur = mailparse_msg_get_structure($mime);
echo "MIME-Abschnitte:\n";
foreach ($struktur as $abschnitt) {
echo " - " . $abschnitt . "\n";
}
// Ressource freigeben
mailparse_msg_free($mime);
?>
Abschnitte analysieren und Typ ausgeben
<?php
$rawEmail = file_get_contents('/pfad/zur/email.eml');
$mime = mailparse_msg_create();
mailparse_msg_parse($mime, $rawEmail);
$abschnitte = mailparse_msg_get_structure($mime);
foreach ($abschnitte as $name) {
// Teilressource für diesen Abschnitt holen
$teil = mailparse_msg_get_part($mime, $name);
$daten = mailparse_msg_get_part_data($teil);
$contentType = $daten['content-type'] ?? 'unbekannt';
echo "Abschnitt '{$name}': Content-Type = {$contentType}\n";
}
mailparse_msg_free($mime);
?>
// Wichtig · Fallstricke
PECL-Erweiterung erforderlich: mailparse_msg_get_structure() ist Teil der PECL-Erweiterung mailparse. Sie ist nicht im PHP-Kern enthalten und muss über PECL installiert oder als Systempaket (z. B. php-mailparse) bereitgestellt werden.
Ressourcen-Verwaltung: Denken Sie daran, die MIME-Ressource nach Verwendung mit mailparse_msg_free() freizugeben, um Speicherlecks zu vermeiden – besonders bei der Verarbeitung vieler E-Mails in Schleifen.
PHP 8+: Ab PHP 8.0 wurde das interne Ressourcen-Modell für viele Erweiterungen überarbeitet. Prüfen Sie die Kompatibilität Ihrer mailparse-Version mit der eingesetzten PHP-Version.