+ break;
+ case 'FLAGS':
+ $flags = parseArray($read,$i);
+ if (!$flags) break 3;
+ $aFlags = array();
+ foreach ($flags as $flag) {
+ $flag = strtolower($flag);
+ $aFlags[$flag] = true;
+ }
+ $msg['FLAGS'] = $aFlags;
+ break;
+ case 'RFC822.SIZE':
+ $i_pos = strpos($read,' ',$i);
+ if (!$i_pos) {
+ $i_pos = strpos($read,')',$i);
+ }
+ if ($i_pos) {
+ $msg['SIZE'] = substr($read,$i,$i_pos-$i);
+ $i = $i_pos+1;
+ } else {
+ break 3;
+ }
+
+ break;
+ case 'ENVELOPE':
+ break; // to be implemented, moving imap code out of the nessages class
+ sqimap_parse_address($read,$i,$msg);
+ break; // to be implemented, moving imap code out of the nessages class
+ case 'BODYSTRUCTURE':
+ break;
+ case 'INTERNALDATE':
+ $msg['INTERNALDATE'] = str_replace(' ', ' ',parseString($read,$i));
+ break;
+ case 'BODY.PEEK[HEADER.FIELDS':
+ case 'BODY[HEADER.FIELDS':
+ $i = strpos($read,'{',$i);
+ $header = parseString($read,$i);
+ if ($header === false) break 2;
+ /* First we replace all \r\n by \n, and unfold the header */
+ $hdr = trim(str_replace(array("\r\n", "\n\t", "\n "),array("\n", ' ', ' '), $header));
+ /* Now we can make a new header array with */
+ /* each element representing a headerline */
+ $hdr = explode("\n" , $hdr);
+ $aReceived = array();
+ foreach ($hdr as $line) {
+ $pos = strpos($line, ':');
+ if ($pos > 0) {
+ $field = strtolower(substr($line, 0, $pos));
+ if (!strstr($field,' ')) { /* valid field */
+ $value = trim(substr($line, $pos+1));
+ switch($field)
+ {
+ case 'to': $msg['TO'] = $value; break;
+ case 'cc': $msg['CC'] = $value; break;
+ case 'from': $msg['FROM'] = $value; break;
+ case 'date':
+ $msg['DATE'] = str_replace(' ', ' ', $value);
+ break;
+ case 'x-priority': $msg['PRIORITY'] = $value; break;
+ case 'subject': $msg['SUBJECT'] = $value; break;
+ case 'content-type':
+ $type = $value;
+ if ($pos = strpos($type, ";")) {
+ $type = substr($type, 0, $pos);
+ }
+ $type = explode("/", $type);
+ if(!is_array($type) || count($type) < 2) {
+ $msg['TYPE0'] = 'text';
+ $msg['TYPE1'] = 'plain';
+ } else {
+ $msg['TYPE0'] = strtolower($type[0]);
+ $msg['TYPE1'] = strtolower($type[1]);
+ }
+ break;
+ case 'received':
+ $aReceived[] = $value;
+ break;
+ default: break;
+ }
+ }
+ }
+ }
+ if (count($aReceived)) {
+ $msg['RECEIVED'] = $aReceived;
+ }
+ break;
+ default:
+ ++$i;
+ break;