public static function parsePlain($plain) { list($header, $body) = explode("\r\n\r\n", $plain, 2); // Header parsen $header = RFC5322Header::parsePlain($header); // Body parsen $body = RFC5322MimeBody::parsePlain($header->extractContentHeader(), $body); return new RFC5322Message($header->extractMessageHeader(), $body); }
public static function parsePlain($header, $body) { $parts = array(); $mimetype = null; if ($header->has("Content-Type") && substr($header->get("Content-Type")->getValue(), 0, 9) == "multipart" && $header->get("Content-Type")->hasExtra("boundary")) { // Multipart-Nachricht $mimetype = $header->get("Content-Type")->getValue(); $boundary = $header->get("Content-Type")->getExtra("boundary"); $mimeparts = explode("--" . $boundary, $body); // Normalerweise bestehen der erste (This is an multipart ...) und letzte Teil (-- nur aus Sinnlosem Inhalt // Falls das nicht so ist, fixen wir das halt ... if (substr($last = array_pop($mimeparts), 0, 2) != "--") { array_push($mimeparts, $last); } array_shift($mimeparts); foreach ($mimeparts as $mimepart) { list($partheader, $partbody) = explode("\r\n\r\n", $mimepart, 2); $partheader = RFC5322Header::parsePlain($partheader); $parts[] = self::parsePlain($partheader, $partbody); } } else { // Singlepart-Nachricht $parts[] = RFC5322PlainBody::parsePlain($header, $body); } switch ($mimetype) { case "multipart/signed": return new RFC5322SignedMimeBody($header, $parts); case "multipart/related": return new RFC5322RelatedMimeBody($header, $parts); case "multipart/alternative": return new RFC5322AlternativeMimeBody($header, $parts); default: case "multipart/mixed": return new RFC5322MixedMimeBody($header, $parts); } }