increment year in copyright notices
[squirrelmail.git] / class / mime / Rfc822Header.class.php
index ba22d2568615bdcaeb5554ad665a498f2bee0fe2..d509503558afa892cc9b6c31019b3da2b65698ab 100644 (file)
@@ -5,7 +5,7 @@
  *
  * This file contains functions needed to handle headers in mime messages.
  *
- * @copyright © 2003-2006 The SquirrelMail Project Team
+ * @copyright © 2003-2007 The SquirrelMail Project Team
  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  * @version $Id$
  * @package squirrelmail
@@ -107,9 +107,15 @@ class Rfc822Header {
      */
     var $priority = 3;
     /**
+     * Disposition notification for requesting message delivery notification (MDN)
      * @var mixed
      */
     var $dnt = '';
+    /**
+     * Delivery notification (DR)
+     * @var mixed
+     */
+    var $drnt = '';
     /**
      * @var mixed
      */
@@ -126,6 +132,11 @@ class Rfc822Header {
      * @var mixed
      */
     var $mlist = array();
+    /**
+     * SpamAssassin 'x-spam-status' header
+     * @var mixed
+     */
+    var $x_spam_status = array();
     /**
      * Extra header
      * only needed for constructing headers in delivery class
@@ -260,11 +271,14 @@ class Rfc822Header {
                 $this->references = $value;
                 break;
             case 'x-confirm-reading-to':
-            case 'return-receipt-to':
             case 'disposition-notification-to':
                 $value = $this->stripComments($value);
                 $this->dnt = $this->parseAddress($value);
                 break;
+            case 'return-receipt-to':
+                $value = $this->stripComments($value);
+                $this->drnt = $this->parseAddress($value);
+                break;
             case 'mime-version':
                 $value = $this->stripComments($value);
                 $value = str_replace(' ', '', $value);
@@ -329,6 +343,9 @@ class Rfc822Header {
                 $value = $this->stripComments($value);
                 $this->mlist('id', $value);
                 break;
+           case 'x-spam-status':
+                $this->x_spam_status = $this->parseSpamStatus($value);
+                break;
             default:
                 break;
         }
@@ -776,6 +793,53 @@ class Rfc822Header {
         $this->mlist[$field] = $res_a;
     }
 
+    /**
+     * Parses the X-Spam-Status header
+     * @param string $value
+     */
+    function parseSpamStatus($value) {
+        // Header value looks like this:
+        // No, score=1.5 required=5.0 tests=MSGID_FROM_MTA_ID,NO_REAL_NAME,UPPERCASE_25_50 autolearn=disabled version=3.1.0-gr0
+
+        $spam_status = array();
+
+        if (preg_match ('/^(No|Yes),\s+score=(-?\d+\.\d+)\s+required=(-?\d+\.\d+)\s+tests=(.*?)\s+autolearn=(.*?)\s+version=(.+?)$/', $value, $matches)) {
+            // full header
+            $spam_status['bad_format'] = 0;
+            $spam_status['value'] = $matches[0];
+            // is_spam
+            if (isset($matches[1])
+                && strtolower($matches[1]) == 'yes') {
+                $spam_status['is_spam'] = true;
+            } else {
+                $spam_status['is_spam'] = false;
+            }
+
+            // score
+            $spam_status['score'] = $matches[2];
+
+            // required
+            $spam_status['required'] = $matches[3];
+
+            // tests
+            $tests = array();
+            $tests = explode(',', $matches[4]);
+            foreach ($tests as $test) {
+                $spam_status['tests'][] = trim($test);
+            }
+
+            // autolearn
+            $spam_status['autolearn'] = $matches[5];
+
+            // version
+            $spam_status['version'] = $matches[6];
+        } else {
+            $spam_status['bad_format'] = 1;
+            $spam_status['value'] = $value;
+        }
+        return $spam_status;
+    }
+
     /**
      * function to get the address strings out of the header.
      * example1: header->getAddr_s('to').
@@ -940,5 +1004,3 @@ class Rfc822Header {
         return $this->content_type->properties;
     }
 }
-
-?>