+ function parseField($field,$value) {
+ $field = strtolower($field);
+ switch($field)
+ {
+ case ('date'):
+ $d = strtr($value, array(' ' => ' '));
+ $d = explode(' ', $d);
+ $this->date = getTimeStamp($d);
+ break;
+ case ('subject'):
+ $this->subject = $value;
+ break;
+ case ('from'):
+ $this->from = $this->parseAddress($value,true);
+ break;
+ case ('sender'):
+ $this->sender = $this->parseAddress($value);
+ break;
+ case ('reply-to'):
+ $this->reply_to = $this->parseAddress($value, true);
+ break;
+ case ('to'):
+ $this->to = $this->parseAddress($value, true);
+ break;
+ case ('cc'):
+ $this->cc = $this->parseAddress($value, true);
+ break;
+ case ('bcc'):
+ $this->bcc = $this->parseAddress($value, true);
+ break;
+ case ('in-reply-to'):
+ $this->in_reply_to = $value;
+ break;
+ case ('message_id'):
+ $this->message_id = $value;
+ break;
+ case ('disposition-notification-to'):
+ $this->dnt = $this->parseAddress($value);
+ break;
+ case ('mime-Version'):
+ $value = str_replace(' ','',$value);
+ if ($value == '1.0') {
+ $this->mime = true;
+ }
+ break;
+ case ('content-type'):
+ $this->parseContentType($value);
+ break;
+ case ('content-disposition'):
+ $this->parseDisposition($value);
+ break;
+ case ('x-mailer'):
+ $this->xmailer = $value;
+ break;
+ case ('x-priority'):
+ $this->priority = $value;
+ break;
+ case ('list-post'):
+ $this->mlist('post',$value);
+ break;
+ case ('list-reply'):
+ $this->mlist('reply',$value);
+ break;
+ case ('list-subscribe'):
+ $this->mlist('subscribe',$value);
+ break;
+ case ('list-unsubscribe'):
+ $this->mlist('unsubscribe',$value);
+ break;
+ case ('list-archive'):
+ $this->mlist('archive',$value);
+ break;
+ case ('list-owner'):
+ $this->mlist('owner',$value);
+ break;
+ case ('list-help'):
+ $this->mlist('help',$value);
+ break;
+ case ('list-id'):
+ $this->mlist('id',$value);
+ break;
+ default:
+ break;
+ }
+ }
+
+ function parseAddress($address, $ar=false, $addr_ar = array(), $group = '') {
+ $pos = 0;
+ $j = strlen( $address );
+ $name = '';
+ $addr = '';
+ while ( $pos < $j ) {
+ switch ($address{$pos})
+ {
+ case ('"'): /* get the personal name */
+ $pos++;
+ if ($address{$pos} == '"') {
+ $pos++;
+ } else {
+ while ( $pos < $j && $address{$pos} != '"') {
+ if (substr($address, $pos, 2) == '\\"') {
+ $name .= $address{$pos};
+ $pos++;
+ } elseif (substr($address, $pos, 2) == '\\\\') {
+ $name .= $address{$pos};
+ $pos++;
+ }
+ $name .= $address{$pos};
+ $pos++;
+ }
+ }
+ $pos++;
+ break;
+ case ('<'): /* get email address */
+ $addr_start=$pos;
+ $pos++;
+ while ( $pos < $j && $address{$pos} != '>' ) {
+ $addr .= $address{$pos};
+ $pos++;
+ }
+ $pos++;
+ break;
+ case ('('): /* rip off comments */
+ $addr_start=$pos;
+ $pos++;
+ while ( $pos < $j && $address{$pos} != ')' ) {
+ $addr .= $address{$pos};
+ $pos++;
+ }
+ $address_start = substr($address,0,$addr_start);
+ $address_end = substr($address,$pos+1);
+ $address = $address_start . $address_end;
+ $j = strlen( $address );
+ $pos = $addr_start;
+ $pos++;
+ break;
+ case (','): /* we reached a delimiter */
+ if ($addr == '') {
+ $addr = substr($address,0,$pos);
+ } elseif ($name == '') {
+ $name = substr($address,0,$addr_start);
+ }
+
+ $at = strpos($addr, '@');
+ $addr_structure = new address_structure();
+ $addr_structure->personal = $name;
+ $addr_structure->group = $group;
+ if ($at) {
+ $addr_structure->mailbox = substr($addr,0,$at);
+ $addr_structure->host = substr($addr,$at+1);
+ } else {
+ $addr_structure->mailbox = $addr;
+ }
+ $address = trim(substr($address,$pos+1));
+ $j = strlen( $address );
+ $pos = 0;
+ $name = '';
+ $addr = '';
+ $addr_ar[] = $addr_structure;
+ break;
+ case (':'): /* process the group addresses */
+ /* group marker */
+ $group = substr($address,0,$pos);
+ $address = substr($address,$pos+1);
+ $result = $this->parseAddress($address, $ar, $addr_ar, $group);
+ $addr_ar = $result[0];
+ $pos = $result[1];
+ $address = substr($address,$pos);
+ $j = strlen( $address );
+ $group = '';
+ $pos++;
+ break;
+ case (';'):
+ if ($group) {
+ $address = substr($address, 0, $pos-1);
+ }
+ $pos++;
+ break;
+ default:
+ $pos++;
+ break;
+ }
+
+ }
+ if ($addr == '') {
+ $addr = substr($address,0,$pos);
+ } elseif ($name == '') {
+ $name = substr($address,0,$addr_start);
+ }
+ $at = strpos($addr, '@');
+ $addr_structure = new address_structure();
+ $addr_structure->group = $group;
+ if ($at) {
+ $addr_structure->mailbox = trim(substr($addr,0,$at));
+ $addr_structure->host = trim(substr($addr,$at+1));
+ } else {
+ $addr_structure->mailbox = trim($addr);
+ }
+ if ($group && $addr == '') { /* no addresses found in group */
+ $name = "$group: Undisclosed recipients;";
+ $addr_structure->personal = $name;
+ $addr_ar[] = $addr_structure;
+ return (array($addr_ar,$pos+1));
+ } else {
+ $addr_structure->personal = $name;
+ if ($name || $addr) {
+ $addr_ar[] = $addr_structure;
+ }
+ }
+ if ($ar) {
+ return ($addr_ar);
+ } else {
+ return ($addr_ar[0]);
+ }