X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=src%2Fread_body.php;h=a8eb3056dbd9c4af770d8f7fd0bcef07a9d8a16b;hp=8d647a54879d6c17595d509cc1b6798329b712c4;hb=ad15d68754bb9d2c5b594da2445f0b9d88a4f0e1;hpb=5dd6c4d7b35ccb12d93f3785366eba67f691c9e9 diff --git a/src/read_body.php b/src/read_body.php index 8d647a54..a8eb3056 100644 --- a/src/read_body.php +++ b/src/read_body.php @@ -17,7 +17,8 @@ require_once('../functions/imap.php'); require_once('../functions/mime.php'); require_once('../functions/date.php'); require_once('../functions/url_parser.php'); - +require_once('../functions/smtp.php'); + /** * 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 @@ -58,8 +59,9 @@ function RemoveAddress(&$addr_list, $addr) { /** returns the index of the previous message from the array. */ function findPreviousMessage() { - global $msort, $currentArrayIndex, $sort, $msgs, $imapConnection; - global $mailbox, $data_dir, $username; + global $msort, $currentArrayIndex, $sort, $msgs, $imapConnection, + $mailbox, $data_dir, $username; + $result = -1; if ($sort == 6) { @@ -87,26 +89,26 @@ function findPreviousMessage() { * "printer friendly". */ function printer_friendly_link() { - global $passed_id, $mailbox, $ent_num, $color; - global $pf_subtle_link; - global $javascript_on; + global $passed_id, $mailbox, $ent_num, $color, + $pf_subtle_link, + $javascript_on; if (strlen(trim($mailbox)) < 1) { $mailbox = 'INBOX'; } - $params = '?passed_ent_id=' . $ent_num; - $params .= '&mailbox=' . urlencode($mailbox); - $params .= '&passed_id=' . $passed_id; + $params = '?passed_ent_id=' . $ent_num . + '&mailbox=' . urlencode($mailbox) . + '&passed_id=' . $passed_id; $print_text = _("View Printable Version"); if (!$pf_subtle_link) { /* The link is large, on the bottom of the header panel. */ - $result = ' ' . "\n" . - ' ' . "\n" . - '  ' . "\n" . - ' '."\n"; + $result = '' . + '' . + ' ' . + ''."\n"; } else { /* The link is subtle, below "view full header". */ $result = "
\n"; @@ -130,22 +132,165 @@ function printer_friendly_link() { if (!$pf_subtle_link) { /* The link is large, on the bottom of the header panel. */ - $result .= ' ' . "\n" . - ' ' . "\n"; + $result .= '' . "\n"; } return ($result); } -/*****************************/ -/*** Main of read_boby.php ***/ -/*****************************/ +function ServerMDNSupport( $read ) { + + $num = 0; + $resp = ''; + while ($num < count($read) ) { + $resp .= $read[$num]; + $num++; + } + $read[] = split(' * ', $resp); + $num = 0; + $ret = FALSE; + while ( !$ret && $num < count($read) ) { + $ret = preg_match( '/.*PERMANENTFLAGS.*(MDNSent|\\\*).*/i', $read[$num] ); + /* + if ( ereg('PERMANENTFLAGS', $read[$num] ) ) { + $ret = ( ereg('mdnsent',strtolower($read[$num]) ) || ereg("\\\*", $read[$num] ) ); + } + */ + $num++; + } + 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 ); +/* + $body = sprintf( _("This message sent on %s to %s with subject \"%s\" has been displayed on %s."), + $senton, $to, $subject, $now ) . + "\r\n" . + _("This is no guarantee that the message has been read or understood.") . "\r\n"; +*/ + // 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; + + if ( $set ) { + $sg = '+'; + + } else { + $sg = '-'; + } + + $cmd = 'STORE ' . $passed_id . ' ' . $sg . 'FLAGS ($MDNSent)'; + sqimap_mailbox_select($imapConnection, $mailbox); + $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 +*/ $imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); -sqimap_mailbox_select($imapConnection, $mailbox); +$read = sqimap_mailbox_select($imapConnection, $mailbox); + 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); + $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); @@ -159,9 +304,9 @@ if (isset($view_hdr)) { } else { echo "&passed_id=$passed_id&startMessage=$startMessage&show_more=$show_more\">"; } - echo ''._("View message") . "\n" . - "\n" . - '
'; + echo _("View message") . "
\n" . + "\n" . + '
'; $cnum = 0; for ($i=1; $i < count($read); $i++) { @@ -197,8 +342,8 @@ if (isset($view_hdr)) { parseEmail($s); if (isset($f)) echo "$f$s"; } - echo "
\n"; - echo ''; + echo "\n" . + ''; sqimap_logout($imapConnection); exit; } @@ -290,7 +435,9 @@ $ent_num = findDisplayEntity($message); $echo_more = _("more"); $echo_less = _("less"); -if (!isset($show_more_cc)) $show_more_cc = false; +if (!isset($show_more_cc)) { + $show_more_cc = FALSE; +} /** FORMAT THE TO STRING **/ $i = 0; @@ -420,23 +567,23 @@ if ($default_use_priority) { switch($priority_level) { /* check for a higher then normal priority. */ case '1': - case '2': - $priority_string = _("High"); + case '2': + $priority_string = _("High"); break; /* check for a lower then normal priority. */ case '4': - case '5': - $priority_string = _("Low"); + case '5': + $priority_string = _("Low"); break; - + /* check for a normal priority. */ - case '3': + case '3': default: $priority_level = '3'; - $priority_string = _("Normal"); + $priority_string = _("Normal"); break; - + } } @@ -446,13 +593,13 @@ $subject = decodeHeader(htmlspecialchars($message->header->subject)); do_hook('read_body_top'); echo '
' . - '' . "\n" . - '
' . "\n" . - ' ' . "\n" . - ' ' . "\n" . - ' ' . - ' ' . + '' . '
' . "\n" . - ' ' . "\n" . - '' . + '
' . + '' . + '' . + '' . + '' . - ' ' . - '
' . + '' . + '' . "\n" . - ' ' . "\n" . - ' ' . "\n"; + '' . + '' . + ''; if ( !($where && $what) ) { @@ -505,40 +652,40 @@ if ( !($where && $what) ) { } } -echo ' ' . "\n" . - ' ' . - ' ' . - ' ' . + '' . + '' . + '" . _("Forward") . ' | ' . - ' " . _("Reply") . ' | ' . - ' " . _("Reply All") . '  ' . - ' ' . - '
' . - '
' . - ' ' . "\n" . - ' ' . "\n"; + '' . + '' . + '' . + '
' . + '
' . + '' . "\n" . + '' . "\n"; /** subject **/ -echo " \n" . - ' \n" . + '' . "\n" . - ' ' ."\n"; +echo '' . + ' '; /** from **/ -echo ' ' . "\n" . - ' ' . + '' . "\n" . - ' ' . "\n"; + '' . + ''; /** date **/ -echo ' ' . "\n" . - ' ' . "\n" . + '' . "\n" . - ' ' . "\n"; + "' . "\n" . + '' . "\n"; /** to **/ -echo " \n" . - " \n" . + "' . "\n" . - ' ' . "\n"; + '' . "\n" . + '' . "\n"; /** cc **/ if (isset($cc_string)) { - echo " \n" . - " ' . "\n" . - ' ' . "\n"; + echo '' . + "' . + '' . "\n"; } /** bcc **/ if (isset($bcc_string)) { - echo " \n" . - " ' . "\n" . - ' ' . "\n"; + echo ''. + "' . + '' . "\n"; } if ($default_use_priority) { if (isset($priority_string)) { - echo " \n" . - " " . "\n" . - " " . "\n"; + echo '' . + "' . + "" . "\n"; } } @@ -623,13 +770,13 @@ if ($show_xmailer_default) { $response, $readmessage); $mailer = substr($read[1], strpos($read[1], " ")); if (trim($mailer)) { - echo " \n" . - " " . "\n" . - " " . "\n"; + echo '' . + "' . + "" . "\n"; } } @@ -638,11 +785,165 @@ if (!$pf_subtle_link) { echo printer_friendly_link(true); } -do_hook("read_body_header"); +if ($default_use_mdn) { + if ($mdn_user_support) { + + // debug gives you the capability to remove mdn-flags + $debug = 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 ($debug ) { + 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 ($debug && $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" . +echo "\n" . _("Subject:") . - " \n" . - " $subject \n" . - " \n" . + "$subject \n" . + "'. '
' . "\n" . +echo '
' . _("From:") . - ' ' . "\n" . - " $from_name \n" . - '
' . + "$from_name \n" . + '
' . "\n" . +echo '
' . "\n" . _("Date:") . - " \n" . - " $dateString \n" . - '
\n" . + "$dateString \n" . + '
\n" . +echo "
\n" . _("To:") . - ' ' . "\n" . - " $to_string \n" . - '
' . "\n" . + "$to_string \n" . + '
\n" . - ' Cc:' . "\n" . - " \n" . - " $cc_string \n" . - '
" . + 'Cc:' . + "" . + "$cc_string " . + '
\n" . - ' Bcc:' . "\n" . - " \n" . - " $bcc_string \n" . - '
" . + 'Bcc:' . + "" . + "$bcc_string " . + '
\n" . - " "._("Priority").": \n". - " \n" . - " $priority_string \n" . - "
" . + _("Priority") . ': '. + "" . + "$priority_string " . + '
\n" . - " "._("Mailer").": \n". - " \n" . - " $mailer \n" . - "
" . + _("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" . '
'. @@ -653,23 +954,29 @@ echo "\n" '
' . "\n"; /* show attached images inline -- if pref'fed so */ -if (($attachment_common_show_images) and +if (($attachment_common_show_images) && is_array($attachment_common_show_images_list)) { + foreach ($attachment_common_show_images_list as $img) { - echo "\n" . - " \n" . - " \n" . - " \n" . + '&absolute_dl=true'; + + echo "
\n" . - ' ' . "\n" . - "
\n" . + '' . + '\n" . + "\n" . "
' . + "\n" . + "
\n"; + } } + do_hook('read_body_bottom'); do_hook('html_bottom'); sqimap_logout($imapConnection);