Start · Sprachen · PHP · Referenz · mailparse_msg_create

mailparse_msg_create

Funktion

Erstellt eine neue, leere MIME-Mail-Ressource, die anschließend mit Rohdaten befüllt und analysiert werden kann.

Kategorie: http

Signatur

mailparse_msg_create(): resource

Beschreibung

mailparse_msg_create() erzeugt eine neue MIME-Mail-Ressource (Handle), die als Grundlage für das schrittweise Einlesen und Parsen einer E-Mail dient. Die Funktion gehört zur Mailparse-Erweiterung (PECL), die speziell für das effiziente Verarbeiten großer MIME-Nachrichten entwickelt wurde.

Das zurückgegebene Handle wird typischerweise zusammen mit mailparse_msg_parse() genutzt, um Rohdaten (als String) nacheinander in die Ressource einzulesen, ohne die gesamte E-Mail auf einmal im Speicher halten zu müssen. Abschließend können mit mailparse_msg_get_structure() und mailparse_msg_get_part_data() Struktur und Teile der geparsten Nachricht abgefragt werden.

Wenn die vollständige Nachricht bereits als Datei vorliegt, ist mailparse_msg_parse_file() die bequemere Alternative, da sie Datei-Handle und Parsing in einem Schritt übernimmt. Für bereits vollständig im Speicher vorliegende Strings bietet sich mailparse_msg_create() in Kombination mit mailparse_msg_parse() an.

Nach der Verwendung sollte die Ressource mit mailparse_msg_free() explizit freigegeben werden, um Speicherlecks zu vermeiden.

Rückgabewert

Typ
resource
Beschreibung
Gibt eine MIME-Mail-Ressource zurück, die für weitere Mailparse-Funktionen verwendet werden kann. Im Fehlerfall wird false zurückgegeben.

Beispiele

Schritt-für-Schritt-Parsen einer E-Mail aus einem String

<?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!";

// Neue MIME-Ressource erstellen
$mail = mailparse_msg_create();

// Rohdaten einlesen
mailparse_msg_parse($mail, $rawEmail);

// Struktur der Nachricht ausgeben
$structure = mailparse_msg_get_structure($mail);
print_r($structure);

// Daten des ersten Teils auslesen
$part = mailparse_msg_get_part($mail, $structure[0]);
$partData = mailparse_msg_get_part_data($part);
print_r($partData);

// Ressource freigeben
mailparse_msg_free($mail);
?>
Array ( [0] => 1 ) Array ( [content-type] => text/plain [charset] => UTF-8 ... )

Einlesen einer E-Mail aus einer Datei in Chunks

<?php
$filename = '/var/mail/example.eml';

$mail = mailparse_msg_create();

// Datei blockweise einlesen, um Speicher zu schonen
$fp = fopen($filename, 'r');
if ($fp) {
    while (!feof($fp)) {
        $chunk = fread($fp, 8192);
        mailparse_msg_parse($mail, $chunk);
    }
    fclose($fp);
}

$structure = mailparse_msg_get_structure($mail);
echo "Anzahl MIME-Teile: " . count($structure) . PHP_EOL;

mailparse_msg_free($mail);
?>
Anzahl MIME-Teile: 1

// Wichtig · Fallstricke

Erweiterung erforderlich: Die Funktion setzt die PECL-Erweiterung mailparse voraus, die nicht standardmäßig in PHP enthalten ist. Sie muss separat installiert werden (pecl install mailparse).

Ressourcen-Verwaltung: Jede mit mailparse_msg_create() erzeugte Ressource belegt Speicher. Es ist wichtig, mailparse_msg_free() aufzurufen, sobald die Ressource nicht mehr benötigt wird, insbesondere in lang laufenden Prozessen oder bei der Verarbeitung vieler E-Mails.

PHP 8: Ab PHP 8.0 können PECL-Ressourcen schrittweise durch Objekte ersetzt werden. Prüfe die aktuelle Mailparse-Dokumentation auf eventuelle API-Änderungen in neueren Versionen der Erweiterung.