'; echo '' . "\n"; echo "
" . _("Viewing full header") . ' - '; if (isset($where) && isset($what)) { // Got here from a search echo "'; } else { echo ""; } echo ''._("View message") . "
\n"; echo "\n"; echo '
'; $cnum = 0; for ($i=1; $i < count($read); $i++) { $line = htmlspecialchars($read[$i]); if (eregi("^>", $line)) { $second[$i] = $line; $first[$i] = ' '; $cnum++; } else if (eregi("^[ |\t]", $line)) { $second[$i] = $line; $first[$i] = ''; } else if (eregi("^([^:]+):(.+)", $line, $regs)) { $first[$i] = $regs[1] . ':'; $second[$i] = $regs[2]; $cnum++; } else { $second[$i] = trim($line); $first[$i] = ''; } } for ($i=0; $i < count($second); $i = $j) { if (isset($first[$i])) $f = $first[$i]; if (isset($second[$i])) $s = nl2br($second[$i]); $j = $i + 1; while ($first[$j] == '' && $j < count($first)) { $s .= '    ' . nl2br($second[$j]); $j++; } parseEmail($s); if (isset($f)) echo "$f$s"; } echo "
\n"; echo ''; sqimap_logout($imapConnection); exit; } // given an IMAP message id number, this will look it up in the cached and sorted msgs array and // return the index. used for finding the next and previous messages // returns the index of the next valid message from the array function findNextMessage() { global $msort, $currentArrayIndex, $msgs, $sort; if ($sort == 6) { if ($currentArrayIndex != 1) { return $currentArrayIndex - 1; } } else { for (reset($msort); ($key = key($msort)), (isset($key)); next($msort)) { if ($currentArrayIndex == $msgs[$key]['ID']) { next($msort); $key = key($msort); if (isset($key)) return $msgs[$key]['ID']; } } } return -1; } // Removes just one address from the list of addresses function RemoveAddress(&$addr_list, $addr) { if ($addr == '') return; foreach (array_keys($addr_list, $addr) as $key_to_delete) { unset($addr_list[$key_to_delete]); } } // returns the index of the previous message from the array function findPreviousMessage() { global $msort, $currentArrayIndex, $sort, $msgs, $imapConnection, $mailbox, $data_dir, $username; if ($sort == 6) { $numMessages = sqimap_get_num_messages($imapConnection, $mailbox); if ($currentArrayIndex != $numMessages) { return $currentArrayIndex + 1; } } else { for (reset($msort); ($key = key($msort)), (isset($key)); next($msort)) { if ($currentArrayIndex == $msgs[$key]['ID']) { prev($msort); $key = key($msort); if (isset($key)) return $msgs[$key]['ID']; } } } return -1; } if (isset($msgs)) { $currentArrayIndex = $passed_id; /* for ($i=0; $i < count($msgs); $i++) { if ($msgs[$i]["ID"] == $passed_id) { $currentArrayIndex = $i; break; } } */ } else { $currentArrayIndex = -1; } for ($i = 0; $i < count($msgs); $i++) { if ($msgs[$i]['ID'] == $passed_id) $msgs[$i]['FLAG_SEEN'] = true; } // $message contains all information about the message // including header and body $message = sqimap_get_message($imapConnection, $passed_id, $mailbox); /** translate the subject and mailbox into url-able text **/ $url_subj = urlencode(trim($message->header->subject)); $urlMailbox = urlencode($mailbox); $url_replyto = urlencode($message->header->replyto); $url_replytoall = urlencode($message->header->replyto); // If we are replying to all, then find all other addresses and // add them to the list. Remove duplicates. // This is somewhat messy, so I'll explain: // 1) Take all addresses (from, to, cc) (avoid nasty join errors here) $url_replytoall_extra_addrs = array_merge(array($message->header->from), $message->header->to, $message->header->cc); // 2) Make one big string out of them $url_replytoall_extra_addrs = join(';', $url_replytoall_extra_addrs); // 3) Parse that into an array of addresses $url_replytoall_extra_addrs = parseAddrs($url_replytoall_extra_addrs); // 4) Make them unique -- weed out duplicates // (Coded for PHP 4.0.0) $url_replytoall_extra_addrs = array_keys(array_flip($url_replytoall_extra_addrs)); // 5) Remove the addresses we'll be sending the message 'to' $url_replytoall_avoid_addrs = parseAddrs($message->header->replyto); foreach ($url_replytoall_avoid_addrs as $addr) { RemoveAddress($url_replytoall_extra_addrs, $addr); } // 6) Remove our identities from the CC list (they still can be in the // TO list) RemoveAddress($url_replytoall_extra_addrs, getPref($data_dir, $username, 'email_address')); $idents = getPref($data_dir, $username, 'identities'); if ($idents != '' && $idents > 1) { for ($i = 1; $i < $idents; $i ++) { RemoveAddress($url_replytoall_extra_addrs, getPref($data_dir, $username, 'email_address' . $i)); } } // 7) Smoosh back into one nice line $url_replytoallcc = getLineOfAddrs($url_replytoall_extra_addrs); // 8) urlencode() it $url_replytoallcc = urlencode($url_replytoallcc); $dateString = getLongDateString($message->header->date); // What do we reply to -- text only, if possible $ent_num = findDisplayEntity($message); /** TEXT STRINGS DEFINITIONS **/ $echo_more = _("more"); $echo_less = _("less"); if (!isset($show_more_cc)) $show_more_cc = false; /** FORMAT THE TO STRING **/ $i = 0; $to_string = ''; $to_ary = $message->header->to; while ($i < count($to_ary)) { $to_ary[$i] = htmlspecialchars(decodeHeader($to_ary[$i])); if ($to_string) $to_string = "$to_string
$to_ary[$i]"; else $to_string = "$to_ary[$i]"; $i++; if (count($to_ary) > 1) { if ($show_more == false) { if ($i == 1) { if (isset($where) && isset($what)) { // from a search $to_string = "$to_string ($echo_more)"; } else { $to_string = "$to_string ($echo_more)"; } $i = count($to_ary); } } else if ($i == 1) { if (isset($where) && isset($what)) { // from a search $to_string = "$to_string ($echo_less)"; } else { $to_string = "$to_string ($echo_less)"; } } } } /** FORMAT THE CC STRING **/ $i = 0; if (isset ($message->header->cc[0]) && trim($message->header->cc[0])){ $cc_string = ""; $cc_ary = $message->header->cc; while ($i < count(decodeHeader($cc_ary))) { $cc_ary[$i] = htmlspecialchars($cc_ary[$i]); if ($cc_string) $cc_string = "$cc_string
$cc_ary[$i]"; else $cc_string = "$cc_ary[$i]"; $i++; if (count($cc_ary) > 1) { if ($show_more_cc == false) { if ($i == 1) { if (isset($where) && isset($what)) { // from a search $cc_string = "$cc_string ($echo_more)"; } else { $cc_string = "$cc_string ($echo_more)"; } $i = count($cc_ary); } } else if ($i == 1) { if (isset($where) && isset($what)) { // from a search $cc_string = "$cc_string ($echo_less)"; } else { $cc_string = "$cc_string ($echo_less)"; } } } } } /** make sure everything will display in HTML format **/ $from_name = decodeHeader(htmlspecialchars($message->header->from)); $subject = decodeHeader(htmlspecialchars($message->header->subject)); do_hook('read_body_top'); echo '
'; echo '' . "\n"; echo ' '; echo ' '; echo '
'; echo ' '; echo ' '; echo ' '; echo ' '; echo '
'; echo ' '; if ($where && $what) { echo " "; } else { echo " "; } echo _("Message List"); echo ' | '; if ($where && $what) { echo " '; } else { echo " "; } echo _("Delete"); echo '  '; echo ' '; echo ' '; echo ' ' . "\n"; if ($where && $what) { } else { if ($currentArrayIndex == -1) { echo 'Previous | Next'; } else { $prev = findPreviousMessage(); $next = findNextMessage(); if ($prev != -1) echo "" . _("Previous") . " | "; else echo _("Previous") . ' | '; if ($next != -1) echo "" . _("Next") . ""; else echo _("Next"); } } echo ' ' . "\n"; echo ' '; echo ' '; echo " "; echo _("Forward"); echo ' | '; echo " "; echo _("Reply"); echo ' | '; echo " "; echo _("Reply All"); echo '  '; echo ' '; echo '
'; echo '
'; echo ' ' . "\n"; echo ' ' . "\n"; /** subject **/ echo " \n"; echo ' ' . "\n"; echo ' ' ."\n"; /** from **/ echo ' ' . "\n"; echo ' ' . "\n"; echo ' ' . "\n"; /** date **/ echo ' ' . "\n"; echo ' ' . "\n"; echo ' ' . "\n"; /** to **/ echo " \n"; echo " ' . "\n"; echo ' ' . "\n"; /** cc **/ if (isset($cc_string)) { echo " \n"; echo " ' . "\n"; echo ' ' . "\n"; } do_hook("read_body_header"); echo '
\n"; echo _("Subject:"); echo " \n"; echo " $subject \n"; echo " ' . "\n"; if ($where && $what) { // Got here from a search echo "" . _("View full header") . "\n"; } else { echo "" . _("View full header") . "\n"; } do_hook("read_body_header_right"); echo '
' . "\n"; echo _("From:"); echo ' ' . "\n"; echo " $from_name \n"; echo '
' . "\n"; echo _("Date:"); echo " \n"; echo " $dateString \n"; echo '
\n"; echo _("To:"); echo ' ' . "\n"; echo " $to_string \n"; echo '
\n"; echo ' Cc:' . "\n"; echo " \n"; echo " $cc_string \n"; echo '
'; echo '
'; echo "\n"; echo "
\n"; echo '
'; $body = formatBody($imapConnection, $message, $color, $wrap_at); echo $body; echo '
'; echo '' . "\n"; echo " "; echo '
 
' . "\n"; do_hook('read_body_bottom'); do_hook('html_bottom'); sqimap_logout($imapConnection); ?>