- arsort($read_list);
-
- $patterns = array (
- "/^To:(.*)\$/AU",
- "/^From:(.*)\$/AU",
- "/^X-Priority:(.*)\$/AU",
- "/^Cc:(.*)\$/AU",
- "/^Date:(.*)\$/AU",
- "/^Subject:(.*)\$/AU",
- "/^Content-Type:(.*)\$/AU"
- );
- $regpattern = '';
-
- for ($msgi = 0; $msgi < $maxmsg; $msgi++) {
- $subject = _("(no subject)");
- $from = _("Unknown Sender");
- $priority = 0;
- $messageid = "<>";
- $cc = "";
- $to = "";
- $date = "";
- $type[0] = "";
- $type[1] = "";
- $inrepto = "";
- $flag_seen = false;
- $flag_answered = false;
- $flag_deleted = false;
- $flag_flagged = false;
- $read = $read_list[$msgi];
- $prevline = false;
-
- foreach ($read as $read_part) {
- //unfold multi-line headers
- while ($prevline && strspn($read_part, "\t ") > 0) {
- $read_part = substr($prevline, 0, -2) . ' ' . ltrim($read_part);
- }
- $prev_line = $read_part;
-
- if ($read_part{0} == '*') {
- if ($internaldate) {
- if (preg_match ("/^.+INTERNALDATE\s+\"(.+)\".+/iUA",$read_part, $reg)) {
- $tmpdate = trim($reg[1]);
- $tmpdate = str_replace(' ',' ',$tmpdate);
- $tmpdate = explode(' ',$tmpdate);
- $date = str_replace('-',' ',$tmpdate[0]) . " " .
- $tmpdate[1] . " " .
- $tmpdate[2];
- }
- }
- if (preg_match ("/^.+RFC822.SIZE\s+(\d+).+/iA",$read_part, $reg)) {
- $size = $reg[1];
- }
- if (preg_match("/^.+FLAGS\s+\((.*)\).+/iUA", $read_part, $regs)) {
- $flags = explode(' ',trim($regs[1]));
- foreach ($flags as $flag) {
- $flag = strtolower($flag);
- if ($flag == '\\seen') {
- $flag_seen = true;
- } else if ($flag == '\\answered') {
- $flag_answered = true;
- } else if ($flag == '\\deleted') {
- $flag_deleted = true;
- } else if ($flag == '\\flagged') {
- $flag_flagged = true;
- }
- }
- }
- } else {
- $firstchar = $read_part{0};
- if ($firstchar == 'T') {
- $regpattern = $patterns[0];
- $id = 1;
- } else if ($firstchar == 'F') {
- $regpattern = $patterns[1];
- $id = 2;
- } else if ($firstchar == 'X') {
- $regpattern = $patterns[2];
- $id = 3;
- } else if ($firstchar == 'C') {
- if (strtolower($read_part{1}) == 'c') {
- $regpattern = $patterns[3];
- $id = 4;
- } else if (strtolower($read_part{1}) == 'o') {
- $regpattern = $patterns[6];
- $id = 7;
- }
- } else if ($firstchar == 'D' && !$internaldate ) {
- $regpattern = $patterns[4];
- $id = 5;
- } else if ($firstchar == 'S') {
- $regpattern = $patterns[5];
- $id = 6;
- } else $regpattern = '';
-
- if ($regpattern) {
- if (preg_match ($regpattern, $read_part, $regs)) {
- switch ($id) {
- case 1:
- $to = $regs[1];
- break;
- case 2:
- $from = $regs[1];
- break;
- case 3:
- $priority = $regs[1];
- break;
- case 4:
- $cc = $regs[1];
- break;
- case 5:
- $date = $regs[1];
- break;
- case 6:
- $subject = htmlspecialchars(trim($regs[1]));
- if ($subject == "") {
- $subject = _("(no subject)");
- }
- break;
- case 7:
- $type = strtolower(trim($regs[1]));
- if ($pos = strpos($type, ";")) {
- $type = substr($type, 0, $pos);
- }
- $type = explode("/", $type);
- if (!isset($type[1])) {
- $type[1] = '';
- }
- break;
- default:
- break;
- }
- }
- }
- }
-
- }
- $header = new small_header;
- if ($issent) {
- $header->from = (trim($to) != '' ? $to : '(' ._("No To Address") . ')');
- } else {
- $header->from = $from;
- }
-
- $header->date = $date;
- $header->subject = $subject;
- $header->to = $to;
- $header->priority = $priority;
- $header->message_id = $messageid;
- $header->cc = $cc;
- $header->size = $size;
- $header->type0 = $type[0];
- $header->type1 = $type[1];
- $header->flag_seen = $flag_seen;
- $header->flag_answered = $flag_answered;
- $header->flag_deleted = $flag_deleted;
- $header->flag_flagged = $flag_flagged;
- $header->inrepto = $inrepto;
- $result[] = $header;
- }
-// echo 'processtime (us): ' . elapsedtime($start) .'<BR>';
- return $result;