diff --git a/include/class.mailparse.php b/include/class.mailparse.php
index 21e8dc5286f968ebf7860fceec8326f47159d1aa..141d18f96419c0ffdc1fe9b9512ce74a48995ea6 100644
--- a/include/class.mailparse.php
+++ b/include/class.mailparse.php
@@ -53,18 +53,39 @@ class Mail_Parse {
                         'include_bodies'=> $this->include_bodies,
                         'decode_headers'=> $this->decode_headers,
                         'decode_bodies' => $this->decode_bodies);
-        $this->splitBodyHeader();
         $this->struct=Mail_mimeDecode::decode($params);
 
         if (PEAR::isError($this->struct))
             return false;
 
+        $this->splitBodyHeader();
+
         // Handle wrapped emails when forwarded
         if ($this->struct && $this->struct->parts) {
             $outer = $this->struct;
             $ctype = $outer->ctype_primary.'/'.$outer->ctype_secondary;
-            if (strcasecmp($ctype, 'message/rfc822') === 0)
+            if (strcasecmp($ctype, 'message/rfc822') === 0) {
+                // Capture Delivered-To header from the outer mail
+                $dt = $this->struct->headers['delivered-to'];
+                // Capture Message-Id from outer mail
+                $mid = $this->struct->headers['message-id'];
+
                 $this->struct = $outer->parts[0];
+
+                // Add (clobber) delivered to header from the outer mail
+                if ($dt)
+                    $this->struct->headers['delivered-to'] = $dt;
+                // Ensure the nested mail has a Message-Id
+                if (!isset($this->struct->headers['message-id']))
+                    $this->struct->headers['message-id'] = $mid;
+
+                // Use headers of the wrapped message
+                $headers = array();
+                foreach ($this->struct->headers as $h=>$v)
+                    $headers[mb_convert_case($h, MB_CASE_TITLE)] = $v;
+                $this->header = Format::array_implode(
+                     ": ", "\n", $headers);
+            }
         }
 
         return (count($this->struct->headers) > 1);
@@ -166,7 +187,9 @@ class Mail_Parse {
     }
 
     function getMessageId(){
-        return $this->struct->headers['message-id'];
+        if (!($mid = $this->struct->headers['message-id']))
+            $mid = sprintf('<%s@local>', md5($this->getHeader()));
+        return $mid;
     }
 
     function getSubject(){