X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=class%2Fmime%2FRfc822Header.class.php;h=4dc03fab48f4a55f883cd794f95887c89100c567;hp=6cefdb1f002caa59da199030b0f90275f0b1cef4;hb=cfebb7248513317af1acb23a9dddd742bc189e74;hpb=1f0269d60c0af7544e2e33ff3b08798a30d364a5 diff --git a/class/mime/Rfc822Header.class.php b/class/mime/Rfc822Header.class.php index 6cefdb1f..4dc03fab 100644 --- a/class/mime/Rfc822Header.class.php +++ b/class/mime/Rfc822Header.class.php @@ -9,11 +9,12 @@ * This contains functions needed to handle mime messages. * * $Id$ + * @package squirrelmail */ -/* - * rdc822_header class +/** * input: header_string or array + * @package squirrelmail */ class Rfc822Header { var $date = '', @@ -35,6 +36,8 @@ class Rfc822Header { $priority = 3, $dnt = '', $encoding = '', + $content_id = '', + $content_desc = '', $mlist = array(), $more_headers = array(); /* only needed for constructing headers in smtp.php */ @@ -43,7 +46,7 @@ class Rfc822Header { $hdr = implode('', $hdr); } /* First we unfold the header */ - $hdr = trim(str_replace(array("\r\n\t", "\r\n "),array('', ''), $hdr)); + $hdr = trim(str_replace(array("\r\n\t", "\r\n "),array(' ', ' '), $hdr)); /* Now we can make a new header array with */ /* each element representing a headerline */ @@ -168,6 +171,16 @@ class Rfc822Header { $value = $this->stripComments($value); $this->parseDisposition($value); break; + case 'content-transfer-encoding': + $this->encoding = $value; + break; + case 'content-description': + $this->content_desc = $value; + break; + case 'content-id': + $value = $this->stripComments($value); + $this->content_id = $value; + break; case 'user-agent': case 'x-mailer': $this->xmailer = $value; @@ -180,11 +193,11 @@ class Rfc822Header { $this->mlist('post', $value); break; case 'list-reply': - $value = $this->stripComments($value); + $value = $this->stripComments($value); $this->mlist('reply', $value); break; case 'list-subscribe': - $value = $this->stripComments($value); + $value = $this->stripComments($value); $this->mlist('subscribe', $value); break; case 'list-unsubscribe': @@ -234,7 +247,7 @@ class Rfc822Header { $i = $iEnd; } $sToken = str_replace($aReplace, $aSpecials,$sToken); - if($sToken) $aTokens[] = $sToken; + if ($sToken) $aTokens[] = $sToken; break; case '"': $iEnd = strpos($address,$cChar,$i+1); @@ -314,7 +327,7 @@ class Rfc822Header { } } $sToken = str_replace($aReplace, $aSpecials,$sToken); - if($sToken) $aTokens[] = $sToken; + if ($sToken) $aTokens[] = $sToken; break; case ',': case ':': @@ -346,7 +359,7 @@ class Rfc822Header { } if (count($aStack)) { $sPersonal = trim(implode('',$aStack)); - } else { + } else { $sPersonal = ''; } if (!$sPersonal && count($aComment)) { @@ -374,18 +387,18 @@ class Rfc822Header { } /* - * parseAddress: recursive function for parsing address strings and store + * parseAddress: recursive function for parsing address strings and store * them in an address stucture object. * input: $address = string * $ar = boolean (return array instead of only the * first element) * $addr_ar = array with parsed addresses // obsolete * $group = string // obsolete - * $host = string (default domainname in case of + * $host = string (default domainname in case of * addresses without a domainname) * $lookup = callback function (for lookup address * strings which are probably nicks - * (without @ ) ) + * (without @ ) ) * output: array with addressstructure objects or only one * address_structure object. * personal name: encoded: =?charset?Q|B?string?= @@ -408,7 +421,7 @@ class Rfc822Header { case '=': case '"': case ' ': - $aStack[] = $sToken; + $aStack[] = $sToken; break; case '(': $aComment[] = substr($sToken,1,-1); @@ -419,7 +432,7 @@ class Rfc822Header { $oAddr = end($aAddress); if(!$oAddr || ((isset($oAddr)) && !$oAddr->mailbox && !$oAddr->personal)) { $sEmail = $sGroup . ':;'; - } + } $aAddress[] = $this->createAddressObject($aStack,$aComment,$sEmail,$sGroup); $sGroup = ''; $aStack = $aComment = array(); @@ -428,7 +441,7 @@ class Rfc822Header { case ',': $aAddress[] = $this->createAddressObject($aStack,$aComment,$sEmail,$sGroup); break; - case ':': + case ':': $sGroup = trim(implode(' ',$aStack)); $sGroup = preg_replace('/\s+/',' ',$sGroup); $aStack = array(); @@ -438,7 +451,7 @@ class Rfc822Header { break; case '>': /* skip */ - break; + break; default: $aStack[] = $sToken; break; } } @@ -477,20 +490,20 @@ class Rfc822Header { if ($sHost && $oAddr->mailbox) { $oAddr->host = $sHost; } - } + } } if (!$aAddrBookAddress && $oAddr->mailbox) { $aProcessedAddress[] = $oAddr; } else { - $aProcessedAddress = array_merge($aProcessedAddress,$aAddrBookAddress); + $aProcessedAddress = array_merge($aProcessedAddress,$aAddrBookAddress); } } - if ($ar) { + if ($ar) { return $aProcessedAddress; } else { return $aProcessedAddress[0]; } - } + } function parseContentType($value) { $pos = strpos($value, ';'); @@ -511,37 +524,39 @@ class Rfc822Header { } $this->content_type = $content_type; } - + /* RFC2184 */ - function processParameters($aParameters) { + function processParameters($aParameters) { $aResults = array(); - $aCharset = array(); - // handle multiline parameters + $aCharset = array(); + // handle multiline parameters foreach($aParameters as $key => $value) { - if ($iPos = strpos($key,'*')) { - $sKey = substr($key,0,$iPos); - if (!isset($aResults[$sKey])) { - $aResults[$sKey] = $value; - if (substr($key,-1) == '*') { // parameter contains language/charset info - $aCharset[] = $sKey; - } - } else { - $aResults[$sKey] .= $value; - } - } + if ($iPos = strpos($key,'*')) { + $sKey = substr($key,0,$iPos); + if (!isset($aResults[$sKey])) { + $aResults[$sKey] = $value; + if (substr($key,-1) == '*') { // parameter contains language/charset info + $aCharset[] = $sKey; + } + } else { + $aResults[$sKey] .= $value; + } + } else { + $aResults[$key] = $value; + } } - foreach ($aCharset as $key) { - $value = $aResults[$key]; - // extract the charset & language - $charset = substr($value,0,strpos($value,"'")); - $value = substr($value,strlen($charset)+1); - $language = substr($value,0,strpos($value,"'")); - $value = substr($value,strlen($charset)+1); - // FIX ME What's the status of charset decode with language information ???? - $value = charset_decode($charset,$value); - $aResults[$key] = $value; - } - return $aResults; + foreach ($aCharset as $key) { + $value = $aResults[$key]; + // extract the charset & language + $charset = substr($value,0,strpos($value,"'")); + $value = substr($value,strlen($charset)+1); + $language = substr($value,0,strpos($value,"'")); + $value = substr($value,strlen($charset)+1); + // FIX ME What's the status of charset decode with language information ???? + $value = charset_decode($charset,$value); + $aResults[$key] = $value; + } + return $aResults; } function parseProperties($value) { @@ -670,7 +685,7 @@ class Rfc822Header { } return $arr; } - + function findAddress($address, $recurs = false) { $result = false; if (is_array($address)) { @@ -685,7 +700,7 @@ class Rfc822Header { $result = $i; } } - ++$i; + ++$i; } } else { if (!is_array($this->cc)) $this->cc = array(); @@ -725,7 +740,7 @@ class Rfc822Header { return true; } else { return false; - } + } } //exit; return $result;