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