' . '' . ' ' . ''."\n"; } else { /* The link is subtle, below "view full header". */ $result = "
\n"; } /* Output the link. */ if ($javascript_on) { $result .= '\n" . "$print_text\n"; } else { $result .= '$print_text\n"; } if (!$pf_subtle_link) { /* The link is large, on the bottom of the header panel. */ $result .= '' . "\n"; } return ($result); } function ServerMDNSupport( $read ) { /* escaping $ doesn't work -> \x36 */ $ret = preg_match( '/(\x36MDNSent|\\\*)/i', $read ); return ( $ret ); } function SendMDN ( $recipient , $sender) { global $imapConnection, $mailbox, $username, $attachment_dir, $SERVER_NAME, $version, $attachments, $identity, $data_dir, $passed_id; $header = sqimap_get_message_header($imapConnection, $passed_id, $mailbox); $hashed_attachment_dir = getHashedDir($username, $attachment_dir); // part 1 (RFC2298) $senton = getLongDateString( $header->date ); $to_array = $header->to; $to = ''; foreach ($to_array as $line) { $to .= " $line "; } $subject = $header->subject; $now = getLongDateString( time() ); $body = _("Your message") . "\r\n\r\n" . "\t" . _("To:") . ' ' . $to . "\r\n" . "\t" . _("Subject:") . ' ' . $subject . "\r\n" . "\t" . _("Sent:") . ' ' . $senton . "\r\n" . "\r\n" . sprintf( _("Was displayed on %s"), $now ); // part2 (RFC2298) $original_recipient = $to; $original_message_id = $header->message_id; $part2 = "Reporting-UA : $SERVER_NAME ; SquirrelMail (version $version) \r\n"; if ($original_recipient != '') { $part2 .= "Original-Recipient : $original_recipient\r\n"; } $final_recipient = $sender; $part2 .= "Final-Recipient: rfc822; $final_recipient\r\n" . "Original-Message-ID : $original_message_id\r\n" . "Disposition: manual-action/MDN-sent-manually; displayed\r\n"; $localfilename = GenerateRandomString(32, 'FILE', 7); $full_localfilename = "$hashed_attachment_dir/$localfilename"; $fp = fopen( $full_localfilename, 'w'); fwrite ($fp, $part2); fclose($fp); $newAttachment = array(); $newAttachment['localfilename'] = $localfilename; $newAttachment['type'] = "message/disposition-notification"; $attachments[] = $newAttachment; $MDN_to = trim($recipient); $reply_id = 0; return (SendMessage($MDN_to,'','', _("Read:") . ' ' . $subject, $body,$reply_id, True, 3) ); } function ToggleMDNflag ( $set ) { global $imapConnection, $passed_id, $mailbox; sqimap_mailbox_select($imapConnection, $mailbox); $sg = $set?'+':'-'; $cmd = 'STORE ' . $passed_id . ' ' . $sg . 'FLAGS ($MDNSent)'; $read = sqimap_run_command ($imapConnection, $cmd, true, $response, $readmessage); } function ClearAttachments() { global $username, $attachments, $attachment_dir; $hashed_attachment_dir = getHashedDir($username, $attachment_dir); foreach ($attachments as $info) { $attached_file = "$hashed_attachment_dir/$info[localfilename]"; if (file_exists($attached_file)) { unlink($attached_file); } } $attachments = array(); } /* * Main of read_boby.php -------------------------------------------------- */ /* Urled vars ---------- $passed_id */ if ( isset( $mailbox ) ) { $mailbox = urldecode( $mailbox ); } $imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); $read = sqimap_mailbox_select($imapConnection, $mailbox, false, false, true); do_hook('html_top'); /* * The following code sets necesarry stuff for the MDN thing */ if( $default_use_mdn && ( $mdn_user_support = getPref($data_dir, $username, 'mdn_user_support', $default_use_mdn) ) ) { $supportMDN = ServerMDNSupport($read["PERMANENTFLAGS"]); $flags = sqimap_get_flags ($imapConnection, $passed_id); $FirstTimeSee = !(in_array( 'Seen', $flags )); } displayPageHeader($color, $mailbox); /* * The following code shows the header of the message and then exit */ if (isset($view_hdr)) { $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY[HEADER]", true, $a, $b); echo '
' . '' . "\n" . "
" . _("Viewing Full Header") . ' - '. ''; } else { echo "&passed_id=$passed_id&startMessage=$startMessage&show_more=$show_more\">"; } echo _("View message") . "
\n" . "\n" . '
'; $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" . ''; sqimap_logout($imapConnection); exit; } if (isset($msgs)) { $currentArrayIndex = $passed_id; } 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 = ''; if (isset($message->header->replyto)) { $url_replyto = urlencode($message->header->replyto); } $url_replytoall = $url_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 = ''; if (isset($message->header->replyto)) { $url_replytoall_avoid_addrs = $message->header->replyto; } $url_replytoall_avoid_addrs = parseAddrs($url_replytoall_avoid_addrs); 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) only if $include_self_reply_all is turned off if (!$include_self_reply_all) { 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 ++) { $cur_email_address = getPref($data_dir, $username, 'email_address' . $i); RemoveAddress($url_replytoall_extra_addrs, $cur_email_address); } } } // 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) { /* From a search... */ $to_string .= ' ($echo_more)"; } else { $to_string .= "sort=$sort&startMessage=$startMessage&show_more=1&show_more_cc=$show_more_cc\">$echo_more)"; } $i = count($to_ary); } } else if ($i == 1) { /* From a search... */ $to_string .= ' ($echo_less)"; } else { $to_string .= "sort=$sort&startMessage=$startMessage&show_more=0&show_more_cc=$show_more_cc\">$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) { /* From a search... */ $cc_string .= ' ($echo_more)"; } else { $cc_string .= "&sort=$sort&startMessage=$startMessage&show_more_cc=1&show_more=$show_more\">$echo_more)"; } $i = count($cc_ary); } } else if ($i == 1) { /* From a search... */ $cc_string .= ' ($echo_less)"; } else { $cc_string .= "sort=$sort&startMessage=$startMessage&show_more_cc=0&show_more=$show_more\">$echo_less)"; } } } } } else { $cc_string = ''; } /** FORMAT THE BCC STRING **/ $i = 0; if (isset ($message->header->bcc[0]) && trim($message->header->bcc[0])){ $bcc_string = ''; $bcc_ary = $message->header->bcc; while ($i < count(decodeHeader($bcc_ary))) { $bcc_ary[$i] = htmlspecialchars($bcc_ary[$i]); if ($bcc_string) { $bcc_string = "$bcc_string
$bcc_ary[$i]"; } else { $bcc_string = "$bcc_ary[$i]"; } $i++; if (count($bcc_ary) > 1) { if ($show_more_cc == false) { if ($i == 1) { /* From a search... */ $bcc_string .= ' ($echo_more)"; } else { $bcc_string .= "sort=$sort&startMessage=$startMessage&show_more_cc=1&show_more=$show_more\">$echo_more)"; } $i = count($bcc_ary); } } else if ($i == 1) { /* From a search... */ $bcc_string .= ' ($echo_less)"; } else { $bcc_string .= "sort=$sort&startMessage=$startMessage&show_more_cc=0&show_more=$show_more\">$echo_less)"; } } } } } else { $bcc_string = ''; } if ($default_use_priority) { $priority_level = substr($message->header->priority,0,1); switch($priority_level) { /* check for a higher then normal priority. */ case '1': case '2': $priority_string = _("High"); break; /* check for a lower then normal priority. */ case '4': case '5': $priority_string = _("Low"); break; /* check for a normal priority. */ case '3': default: $priority_level = '3'; $priority_string = _("Normal"); break; } } /** 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 '
' . '' . '' . '' . '
' . '' . '' . '' . '' . '' . '
' . '' . '"; } else { echo "right_main.php?sort=$sort&startMessage=$startMessage&mailbox=$urlMailbox\">"; } echo _("Message List") . ' | ' . ''; } else { echo "sort=$sort&startMessage=$startMessage\">"; } echo _("Delete") . ' '; if (($mailbox == $draft_folder) && ($save_as_draft)) { echo '| '. _("Resume Draft") . ''; } echo '  ' . '' . '' . ''; if ( !($where && $what) ) { 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 '' . '' . '' . ''. _("Forward") . ' | ' . ''. _("Reply") . ' | ' . ''. _("Reply All") . '  ' . '' . '
' . '
' . '' . "\n" . '' . "\n"; /** subject **/ echo "\n" . '' . ' '; /** from **/ echo '' . '' . ''; /** date **/ echo '' . "\n" . '' . "\n" . '' . "\n"; /** to **/ echo "\n" . "' . "\n" . '' . "\n"; /** cc **/ if (isset($cc_string) && $cc_string <> '') { echo '' . "' . '' . "\n"; } /** bcc **/ if (isset($bcc_string) && $bcc_string <> '') { echo ''. "' . '' . "\n"; } if ($default_use_priority && isset($priority_string) && $priority_string <> '' ) { echo '' . "' . "" . "\n"; } if ($show_xmailer_default) { $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY.PEEK[HEADER.FIELDS (X-Mailer User-Agent)]", true, $response, $readmessage); $mailer = substr($read[1], strpos($read[1], " ")); if (trim($mailer)) { echo '' . "' . "" . "\n"; } } /* Output the printer friendly link if we are not in subtle mode. */ if (!$pf_subtle_link) { echo printer_friendly_link(true); } if ($default_use_mdn) { if ($mdn_user_support) { // debug gives you the capability to remove mdn-flags // $MDNDebug = false; $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY.PEEK[HEADER.FIELDS (Disposition-Notification-To)]", true, $response, $readmessage); $MDN_to = substr($read[1], strpos($read[1], ' ')); $MDN_flag_present = false; $read = sqimap_run_command ($imapConnection, "FETCH $passed_id FLAGS", true, $response, $readmessage); $MDN_flag_present = preg_match( '/.*\$MDNSent/i', $read[0]); if (trim($MDN_to) && (!isset( $sendreceipt ) || $sendreceipt == '' ) ) { if ( $MDN_flag_present && $supportMDN) { $sendreceipt = 'removeMDN'; $url = "\"read_body.php?mailbox=$mailbox&passed_id=$passed_id&startMessage=$startMessage&show_more=$show_more&sendreceipt=$sendreceipt\""; $sendreceipt=''; /* if ($MDNDebug ) { echo '' . "' . '' . "\n"; } else { */ echo '' . "' . '' . "\n"; /* } */ } // when deleted or draft flag is set don't offer to send a MDN response else if ( ereg('\\Draft',$read[0] || ereg('\\Deleted',$read[0])) ) { echo '' . "' . '' . "\n"; } // if no MDNsupport don't use the annoying popup messages else if ( !$FirstTimeSee ) { $sendreceipt = 'send'; $url = "\"read_body.php?mailbox=$mailbox&passed_id=$passed_id&startMessage=$startMessage&show_more=$show_more&sendreceipt=$sendreceipt\""; echo '' . "' . '' . "\n"; $sendreceipt=''; } else { $sendreceipt = 'send'; $url = "\"read_body.php?mailbox=$mailbox&passed_id=$passed_id&startMessage=$startMessage&show_more=$show_more&sendreceipt=$sendreceipt\""; if ($javascript_on) { echo "' . "\n"; } echo '' . "' . '' . "\n"; $sendreceipt = ''; } } if ( !isset( $sendreceipt ) || $sendreceipt == '' ) { } else if ( $sendreceipt == 'send' ) { if ( !$MDN_flag_present) { if (isset($identity) ) { $final_recipient = getPref($data_dir, $username, 'email_address' . '0', '' ); } else { $final_recipient = getPref($data_dir, $username, 'email_address', '' ); } $final_recipient = trim($final_recipient); if ($final_recipient == '' ) { $final_recipient = getPref($data_dir, $username, 'email_address', '' ); } if ( SendMDN( $MDN_to, $final_recipient ) > 0 && $supportMDN ) { ToggleMDNflag( true); } } $sendreceipt = 'removeMDN'; $url = "\"read_body.php?mailbox=$mailbox&passed_id=$passed_id&startMessage=$startMessage&show_more=$show_more&sendreceipt=$sendreceipt\""; $sendreceipt=''; /* if ($MDNDebug && $supportMDN) { echo " \n" . " ' . "\n" . ' ' . "\n"; } else { */ echo " \n" . " ' . "\n" . ' ' . "\n"; /* } */ } elseif ($sendreceipt == 'removeMDN' ) { ToggleMDNflag ( false ); $sendreceipt = 'send'; $url = "\"read_body.php?mailbox=$mailbox&passed_id=$passed_id&startMessage=$startMessage&show_more=$show_more&sendreceipt=$sendreceipt\""; echo ''. "' . '' . "\n"; $sendreceipt = ''; } } } do_hook('read_body_header'); echo '
\n" . _("Subject:") . "\n" . "$subject \n" . "'. '
' . _("From:") . '' . "$from_name \n" . '
' . "\n" . _("Date:") . "\n" . "$dateString \n" . '
\n" . _("To:") . '' . "\n" . "$to_string \n" . '
" . 'Cc:' . "" . "$cc_string " . '
" . 'Bcc:' . "" . "$bcc_string " . '
" . _("Priority") . ': '. "" . "$priority_string " . '
" . _("Mailer") . ': '. "" . "$mailer " . '
" . _("Read receipt") . ': ' . "" . '' . _("send") . " [" . _("Remove MDN flag") . '] ' . '
" . _("Read receipt") . ': ' . "" . ''._("send").''. '
" . _("Read receipt") . ': '. "" . '' . _("requested") . "" . '
" . _("Read receipt") . ': ' . "" . '' . _("requested") . "   [" . _("Send read receipt now") . "]" . '
" . _("Read receipt") . ': ' . "" . '' . _("requested") . "  " . '[' . _("Send read receipt now") . '] ' ." \n" . '
\n" . " "._("Read receipt").": \n". " \n" . ' '._("send").''." " . '[' . _("Remove MDN flag") . '] ' . "\n" . '
\n" . " "._("Read receipt").": \n". " \n" . ' '._("send").''. "\n" . '
" . _("Read receipt") . ': ' . "" . '' . _("requested") . "   [" . _("Send read receipt now") . "]" . '
' . '
'; flush(); echo "\n" . "
\n" . '
'. formatBody($imapConnection, $message, $color, $wrap_at). '
' . '' . "\n" . " " . '
 
' . "\n"; /* show attached images inline -- if pref'fed so */ if (($attachment_common_show_images) && is_array($attachment_common_show_images_list)) { foreach ($attachment_common_show_images_list as $img) { $imgurl = '../src/download.php' . '?' . 'passed_id=' . urlencode($img['passed_id']) . '&mailbox=' . urlencode($mailbox) . '&passed_ent_id=' . urlencode($img['ent_id']) . '&absolute_dl=true'; echo "\n" . '' . '\n" . "\n" . "
' . "\n" . "
\n"; } } do_hook('read_body_bottom'); do_hook('html_bottom'); sqimap_logout($imapConnection); ?>