Start · Sprachen · PHP · Referenz · mailparse_msg_get_part_data

mailparse_msg_get_part_data

Funktion

Gibt ein assoziatives Array mit Metadaten und Headerinformationen zu einem MIME-Nachrichtenteil zurück.

seit PHP 5.0.0 Kategorie: http

Signatur

mailparse_msg_get_part_data(resource $mimemail): array

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

Typ
array
Beschreibung
Ein assoziatives Array mit Informationen zum MIME-Teil. Typische Schlüssel sind 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);
?>
Teil: 1 Content-Type: text/plain Charset: UTF-8 Encoding: unbekannt ---

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);
?>
Von: sender@example.com An: recipient@example.com Betreff: Testmail

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