Пример #1
0
 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);
 }
Пример #2
0
 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);
     }
 }