MDN support. First approach.
authorphilippe_mingo <philippe_mingo@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Sat, 9 Feb 2002 17:10:22 +0000 (17:10 +0000)
committerphilippe_mingo <philippe_mingo@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Sat, 9 Feb 2002 17:10:22 +0000 (17:10 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@2391 7612ce4b-ef26-0410-bec9-ea0150e637f0

src/compose.php
src/load_prefs.php
src/options_display.php
src/read_body.php

index 749a542..0d6a638 100644 (file)
@@ -36,7 +36,7 @@ if (!isset($mailbox) || $mailbox == '' || ($mailbox == 'None')) {
 
 if (isset($draft)) {
     include_once ('../src/draft_actions.php');
-    if (!saveMessageAsDraft($send_to, $send_to_cc, $send_to_bcc, $subject, $body, $reply_id)) {
+    if (!saveMessageAsDraft($send_to, $send_to_cc, $send_to_bcc, $subject, $body, $reply_id, $MDN)) {
         showInputForm();
         exit();
     } else {
@@ -100,13 +100,14 @@ if (isset($send)) {
         $body = $newBody;
 
         do_hook("compose_send");
-
+  
+        $MDN = False;  // we are not sending a mdn response
         if (! isset($mailprio)) {
             $Result = sendMessage($send_to, $send_to_cc, $send_to_bcc,
-                                  $subject, $body, $reply_id);
+                                  $subject, $body, $reply_id, $MDN);
         } else {
             $Result = sendMessage($send_to, $send_to_cc, $send_to_bcc,
-                                  $subject, $body, $reply_id, $mailprio);
+                                  $subject, $body, $reply_id, $MDN, $mailprio);
         }
         if (! $Result) {
             showInputForm();
@@ -419,7 +420,7 @@ function showInputForm () {
            $use_javascript_addr_book, $send_to_bcc, $reply_id, $mailbox,
            $from_htmladdr_search, $location_of_buttons, $attachment_dir,
            $username, $data_dir, $identity, $draft_id, $delete_draft,
-           $mailprio;
+           $mailprio, $default_use_mdn, $mdn_user_support;
 
     $subject = decodeHeader($subject, false);
     $reply_subj = decodeHeader($reply_subj, false);
@@ -439,6 +440,8 @@ function showInputForm () {
     echo "\n" . '<FORM name=compose action="compose.php" METHOD=POST ' .
          'ENCTYPE="multipart/form-data"';
     do_hook("compose_form");
+  
+    
     echo ">\n";
 
     if (isset($draft_id)) {
@@ -601,7 +604,7 @@ function showInputForm () {
 function showComposeButtonRow()
 {
     global $use_javascript_addr_book, $save_as_draft,
-        $default_use_priority, $mailprio;
+           $default_use_priority, $mailprio, $default_use_mdn;
 
     echo "   <TR><td>\n   </td><td>\n";
     if ($use_javascript_addr_book) {
@@ -632,6 +635,14 @@ function showComposeButtonRow()
             "\n\t</select>";
     }
 
+    $mdn_user_support=getPref($data_dir, $username, 'mdn_user_support',$default_use_mdn);
+    if ($default_use_mdn) {
+        if ($mdn_user_support) {    
+            echo _("Confirm reading:").
+                "<input type=\"checkbox\" name=\"request_mdn\" value=1>";
+        }
+    }
+
     do_hook('compose_button_row');
 
     echo "   </TD>\n";
@@ -688,6 +699,8 @@ function saveAttachedFiles() {
 }
 
 
+
+
 function ClearAttachments()
 {
     global $username, $attachments, $attachment_dir;
index 6be0208..acd61f7 100644 (file)
@@ -193,6 +193,8 @@ $attachment_common_show_images = getPref($data_dir, $username, 'attachment_commo
 $pf_subtle_link = getPref($data_dir, $username, 'pf_subtle_link', SMPREF_ON);
 $pf_cleandisplay = getPref($data_dir, $username, 'pf_cleandisplay', SMPREF_OFF);
 
+$mdn_user_support = getPref($data_dir, $username, 'mdn_user_support', SMPREF_ON);
+
 $include_self_reply_all =
     getPref($data_dir, $username, 'include_self_reply_all', SMPREF_ON);
 
index d5c30fd..ec88146 100644 (file)
@@ -18,7 +18,7 @@ define('SMOPT_GRP_MESSAGE', 2);
 
 /* Define the optpage load function for the display options page. */
 function load_optpage_data_display() {
-    global $theme, $language, $languages, $js_autodetect_results;
+    global $theme, $language, $languages, $js_autodetect_results, $default_use_mdn;
 
     /* Build a simple array into which we will build options. */
     $optgrps = array();
@@ -225,6 +225,14 @@ function load_optpage_data_display() {
         'type'    => SMOPT_TYPE_BOOLEAN,
         'refresh' => SMOPT_REFRESH_NONE
     );
+    if ($default_use_mdn) {
+        $optvals[SMOPT_GRP_MESSAGE][] = array(
+            'name'    => 'mdn_user_support',
+            'caption' => _("Enable request/confirm reading"),
+            'type'    => SMOPT_TYPE_BOOLEAN,
+            'refresh' => SMOPT_REFRESH_NONE
+        );
+    }
 
     /* Assemble all this together and return it as our result. */
     $result = array(
index 866422d..a277a20 100644 (file)
@@ -17,6 +17,7 @@ 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
@@ -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 = '      <tr bgcolor="' . $color[0] . '">' . "\n" .
-                '        <td class="medText" align="right" valign="top">' . "\n" .
-                '          &nbsp;' . "\n" .
-                '        </td><td class="medText" valign="top" colspan="2">'."\n";
+        $result =       '<tr bgcolor="' . $color[0] . '">' .
+                        '<td class="medText" align="right" valign="top">' .
+                          '&nbsp;' .
+                        '</td><td class="medText" valign="top" colspan="2">'."\n";
     } else {
         /* The link is subtle, below "view full header". */
         $result = "<BR>\n";
@@ -130,22 +132,162 @@ function printer_friendly_link() {
 
     if (!$pf_subtle_link) {
         /* The link is large, on the bottom of the header panel. */
-        $result .= '        </td>' . "\n" .
-                    '      </tr>' . "\n";
+        $result .=         '</td></tr>' . "\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) ) {
+        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;
+
+    $message = sqimap_get_message($imapConnection, $passed_id, $mailbox);
+    $header = $message->header;
+
+    $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 = 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;
+
+    $myflag = '$MDNSent';
+    if ($set) {
+        $read = sqimap_run_command ($imapConnection, "STORE $passed_id +FLAGS ($myflag)", true,
+                $response, $readmessage);
+    } else {
+        $read = sqimap_run_command ($imapConnection, "STORE $passed_id -FLAGS ($myflag)", 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 = TRUE;
+    $num=0;
+    while ($num < count($flags)) {
+        if ($flags[$num] == 'Seen') {
+            $FirstTimeSee = false;
+        }
+        $num++;
+    }
+
+}
+
 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 +301,9 @@ if (isset($view_hdr)) {
     } else {
         echo "&passed_id=$passed_id&startMessage=$startMessage&show_more=$show_more\">";
     }
-    echo ''._("View message") . "</a></b></center></td></tr></table>\n" .
-        "<table width=\"99%\" cellpadding=2 cellspacing=0 border=0 align=center>\n" .
-        '<tr><td>';
+    echo _("View message") . "</a></b></center></td></tr></table>\n" .
+         "<table width=\"99%\" cellpadding=2 cellspacing=0 border=0 align=center>\n" .
+         '<tr><td>';
 
     $cnum = 0;
     for ($i=1; $i < count($read); $i++) {
@@ -197,8 +339,8 @@ if (isset($view_hdr)) {
         parseEmail($s);
         if (isset($f)) echo "<nobr><tt><b>$f</b>$s</tt></nobr>";
     }
-    echo "</td></tr></table>\n";
-    echo '</body></html>';
+    echo "</td></tr></table>\n" .
+         '</body></html>';
     sqimap_logout($imapConnection);
     exit;
 }
@@ -290,7 +432,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;
@@ -446,13 +590,13 @@ $subject = decodeHeader(htmlspecialchars($message->header->subject));
 
 do_hook('read_body_top');
 echo '<BR>' .
-    '<TABLE CELLSPACING="0" WIDTH="100%" BORDER="0" ALIGN="CENTER" CELLPADDING="0">' . "\n" .
-    '   <TR><TD BGCOLOR="' . $color[9] . '" WIDTH="100%">' . "\n" .
-    '      <TABLE WIDTH="100%" CELLSPACING="0" BORDER="0" CELLPADDING="3">' . "\n" .
-    '         <TR>' . "\n" .
-    '            <TD ALIGN="LEFT" WIDTH="33%">' . "\n" .
-    '               <SMALL>' . "\n" .
-    '<A HREF="' . $base_uri . 'src/';
+     '<TABLE CELLSPACING="0" WIDTH="100%" BORDER="0" ALIGN="CENTER" CELLPADDING="0">' .
+        '<TR><TD BGCOLOR="' . $color[9] . '" WIDTH="100%">' .
+           '<TABLE WIDTH="100%" CELLSPACING="0" BORDER="0" CELLPADDING="3">' .
+              '<TR>' .
+                 '<TD ALIGN="LEFT" WIDTH="33%">' .
+                    '<SMALL>' .
+     '<A HREF="' . $base_uri . 'src/';
 
 if ($where && $what) {
     if( $pos == '' ) {
@@ -478,10 +622,10 @@ if (($mailbox == $draft_folder) && ($save_as_draft)) {
 }
 
 echo '&nbsp;&nbsp;' .
-    '               </SMALL>' . "\n" .
-    '            </TD>' . "\n" .
-    '            <TD WIDTH="33%" ALIGN="CENTER">' . "\n" .
-    '               <SMALL>' . "\n";
+                   '</SMALL>' .
+                '</TD>' .
+                '<TD WIDTH="33%" ALIGN="CENTER">' .
+                   '<SMALL>';
 
 if ( !($where && $what) ) {
 
@@ -505,40 +649,40 @@ if ( !($where && $what) ) {
     }
 }
 
-echo '               </SMALL>' . "\n" .
-    '            </TD><TD WIDTH="33%" ALIGN="RIGHT">' .
-    '               <SMALL>' .
-    '               <A HREF="' . $base_uri . "src/compose.php?forward_id=$passed_id&forward_subj=$url_subj&".
+echo                '</SMALL>' .
+                '</TD><TD WIDTH="33%" ALIGN="RIGHT">' .
+                   '<SMALL>' .
+                   '<A HREF="' . $base_uri . "src/compose.php?forward_id=$passed_id&forward_subj=$url_subj&".
                     ($default_use_priority?"mailprio=$priority_level&":"")
                     ."mailbox=$urlMailbox&ent_num=$ent_num\">" .
     _("Forward") .
     '</A>&nbsp;|&nbsp;' .
-    '               <A HREF="' . $base_uri . "src/compose.php?send_to=$url_replyto&reply_subj=$url_subj&".
+                   '<A HREF="' . $base_uri . "src/compose.php?send_to=$url_replyto&reply_subj=$url_subj&".
                     ($default_use_priority?"mailprio=$priority_level&":"").
                     "reply_id=$passed_id&mailbox=$urlMailbox&ent_num=$ent_num\">" .
     _("Reply") .
     '</A>&nbsp;|&nbsp;' .
-    '               <A HREF="' . $base_uri . "src/compose.php?send_to=$url_replytoall&send_to_cc=$url_replytoallcc&reply_subj=$url_subj&".
+                   '<A HREF="' . $base_uri . "src/compose.php?send_to=$url_replytoall&send_to_cc=$url_replytoallcc&reply_subj=$url_subj&".
                     ($default_use_priority?"mailprio=$priority_level&":"").
                     "reply_id=$passed_id&mailbox=$urlMailbox&ent_num=$ent_num\">" .
     _("Reply All") .
     '</A>&nbsp;&nbsp;' .
-    '               </SMALL>' .
-    '            </TD>' .
-    '         </TR>' .
-    '      </TABLE>' .
-    '   </TD></TR>' .
-    '   <TR><TD CELLSPACING="0" WIDTH="100%">' .
-    '   <TABLE WIDTH="100%" BORDER="0" CELLSPACING="0" CELLPADDING="3">' . "\n" .
-    '      <TR>' . "\n";
+                   '</SMALL>' .
+                '</TD>' .
+             '</TR>' .
+          '</TABLE>' .
+       '</TD></TR>' .
+       '<TR><TD CELLSPACING="0" WIDTH="100%">' .
+       '<TABLE WIDTH="100%" BORDER="0" CELLSPACING="0" CELLPADDING="3">' . "\n" .
+          '<TR>' . "\n";
 
 /** subject **/
-echo "         <TD BGCOLOR=\"$color[0]\" WIDTH=\"10%\" ALIGN=\"right\" VALIGN=\"top\">\n" .
+echo          "<TD BGCOLOR=\"$color[0]\" WIDTH=\"10%\" ALIGN=\"right\" VALIGN=\"top\">\n" .
     _("Subject:") .
-    "         </TD><TD BGCOLOR=\"$color[0]\" WIDTH=\"80%\" VALIGN=\"top\">\n" .
-    "            <B>$subject</B>&nbsp;\n" .
-    "         </TD>\n" .
-    '         <TD ROWSPAN="4" width="10%" BGCOLOR="' . $color[0] .
+             "</TD><TD BGCOLOR=\"$color[0]\" WIDTH=\"80%\" VALIGN=\"top\">\n" .
+                "<B>$subject</B>&nbsp;\n" .
+             "</TD>\n" .
+             '<TD ROWSPAN="4" width="10%" BGCOLOR="' . $color[0] .
     '" ALIGN=right VALIGN=top NOWRAP><small>'.
     '<A HREF="' . $base_uri . "src/read_body.php?mailbox=$urlMailbox&passed_id=$passed_id&";
 
@@ -557,64 +701,64 @@ if ($pf_subtle_link) {
 }
 
 do_hook("read_body_header_right");
-echo '</small></TD>' . "\n" .
-    ' </TR>' ."\n";
+echo '</small></TD>' .
+    ' </TR>';
 
 /** from **/
-echo '      <TR>' . "\n" .
-    '         <TD BGCOLOR="' . $color[0] . '" ALIGN="RIGHT">' . "\n" .
+echo       '<TR>' .
+             '<TD BGCOLOR="' . $color[0] . '" ALIGN="RIGHT">' .
     _("From:") .
-    '         </TD><TD BGCOLOR="' . $color[0] . '">' . "\n" .
-    "            <B>$from_name</B>&nbsp;\n" .
-    '         </TD>' . "\n" .
-    '      </TR>' . "\n";
+             '</TD><TD BGCOLOR="' . $color[0] . '">' .
+                "<B>$from_name</B>&nbsp;\n" .
+             '</TD>' .
+          '</TR>';
 /** date **/
-echo '      <TR>' . "\n" .
-    '         <TD BGCOLOR="' . $color[0] . '" ALIGN="RIGHT">' . "\n" .
+echo       '<TR>' . "\n" .
+             '<TD BGCOLOR="' . $color[0] . '" ALIGN="RIGHT">' . "\n" .
     _("Date:") .
-    "         </TD><TD BGCOLOR=\"$color[0]\">\n" .
-    "            <B>$dateString</B>&nbsp;\n" .
-    '         </TD>' . "\n" .
-    '      </TR>' . "\n";
+             "</TD><TD BGCOLOR=\"$color[0]\">\n" .
+                "<B>$dateString</B>&nbsp;\n" .
+             '</TD>' . "\n" .
+          '</TR>' . "\n";
 
 /** to **/
-echo "      <TR>\n" .
-    "         <TD BGCOLOR=\"$color[0]\" ALIGN=RIGHT VALIGN=TOP>\n" .
+echo       "<TR>\n" .
+             "<TD BGCOLOR=\"$color[0]\" ALIGN=RIGHT VALIGN=TOP>\n" .
     _("To:") .
-    '         </TD><TD BGCOLOR="' . $color[0] . '" VALIGN="TOP">' . "\n" .
-    "            <B>$to_string</B>&nbsp;\n" .
-    '         </TD>' . "\n" .
-    '      </TR>' . "\n";
+             '</TD><TD BGCOLOR="' . $color[0] . '" VALIGN="TOP">' . "\n" .
+                "<B>$to_string</B>&nbsp;\n" .
+             '</TD>' . "\n" .
+          '</TR>' . "\n";
 /** cc **/
 if (isset($cc_string)) {
-    echo "      <TR>\n" .
-        "         <TD BGCOLOR=\"$color[0]\" ALIGN=RIGHT VALIGN=TOP>\n" .
-        '            Cc:' . "\n" .
-        "         </TD><TD BGCOLOR=\"$color[0]\" VALIGN=TOP colspan=2>\n" .
-        "            <B>$cc_string</B>&nbsp;\n" .
-        '         </TD>' . "\n" .
-        '      </TR>' . "\n";
+    echo       '<TR>' .
+                 "<TD BGCOLOR=\"$color[0]\" ALIGN=RIGHT VALIGN=TOP>" .
+                    'Cc:' .
+                 "</TD><TD BGCOLOR=\"$color[0]\" VALIGN=TOP colspan=2>" .
+                    "<B>$cc_string</B>&nbsp;" .
+                 '</TD>' .
+              '</TR>' . "\n";
 }
 
 /** bcc **/
 if (isset($bcc_string)) {
-    echo "      <TR>\n" .
-        "         <TD BGCOLOR=\"$color[0]\" ALIGN=RIGHT VALIGN=TOP>\n" .
-        '            Bcc:' . "\n" .
-        "         </TD><TD BGCOLOR=\"$color[0]\" VALIGN=TOP colspan=2>\n" .
-        "            <B>$bcc_string</B>&nbsp;\n" .
-        '         </TD>' . "\n" .
-        '      </TR>' . "\n";
+    echo       '<TR>'.
+                 "<TD BGCOLOR=\"$color[0]\" ALIGN=RIGHT VALIGN=TOP>" .
+                    'Bcc:' .
+                 "</TD><TD BGCOLOR=\"$color[0]\" VALIGN=TOP colspan=2>" .
+                    "<B>$bcc_string</B>&nbsp;" .
+                 '</TD>' .
+              '</TR>' . "\n";
 }
 if ($default_use_priority) {
     if (isset($priority_string)) {
-        echo "      <TR>\n" .
-            "         <TD BGCOLOR=\"$color[0]\" ALIGN=RIGHT VALIGN=TOP>\n" .
-            "            "._("Priority").": \n".
-            "         </TD><TD BGCOLOR=\"$color[0]\" VALIGN=TOP colspan=2>\n" .
-            "            <B>$priority_string</B>&nbsp;\n" .
-            "         </TD>" . "\n" .
-            "      </TR>" . "\n";
+        echo       '<TR>' .
+                     "<TD BGCOLOR=\"$color[0]\" ALIGN=RIGHT VALIGN=TOP>" .
+                           _("Priority") . ': '.
+                     "</TD><TD BGCOLOR=\"$color[0]\" VALIGN=TOP colspan=2>" .
+                        "<B>$priority_string</B>&nbsp;" .
+                     '</TD>' .
+                  "</TR>" . "\n";
     }
 }
 
@@ -623,13 +767,13 @@ if ($show_xmailer_default) {
                             $response, $readmessage);
     $mailer = substr($read[1], strpos($read[1], " "));
     if (trim($mailer)) {
-        echo "      <TR>\n" .
-            "         <TD BGCOLOR=\"$color[0]\" ALIGN=RIGHT VALIGN=TOP>\n" .
-            "            "._("Mailer").": \n".
-            "         </TD><TD BGCOLOR=\"$color[0]\" VALIGN=TOP colspan=2>\n" .
-            "            <B>$mailer</B>&nbsp;\n" .
-            "         </TD>" . "\n" .
-            "      </TR>" . "\n";
+        echo       '<TR>' .
+                     "<TD BGCOLOR=\"$color[0]\" ALIGN=RIGHT VALIGN=TOP>" .
+                           _("Mailer") . ': '.
+                     "</TD><TD BGCOLOR=\"$color[0]\" VALIGN=TOP colspan=2>" .
+                        "<B>$mailer</B>&nbsp;" .
+                     '</TD>' .
+                  "</TR>" . "\n";
     }
 }
 
@@ -638,7 +782,160 @@ 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
+        $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);
+        $str = strtolower($read[0]);
+        if (ereg('mdnsent', $str ) ) {
+            $MDN_flag_present = true;
+        }
+        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       '<TR>' .
+                                 "<TD BGCOLOR=\"$color[9]\"  ALIGN=RIGHT VALIGN=TOP>" .
+                                       _("Read receipt") . ': ' .
+                                 "</TD><TD BGCOLOR=\"$color[9]\" VALIGN=TOP colspan=2>" .
+                                    '<B>' .
+                                    _("send") .
+                                    "</B> <a href=$url>[" . _("Remove MDN flag") . ']  </a>'  .
+                                 '</TD>' .
+                             '</TR>' . "\n";
+                } else {
+                    echo       '<TR>' .
+                                 "<TD BGCOLOR=\"$color[9]\"  ALIGN=RIGHT VALIGN=TOP>" .
+                                       _("Read receipt") . ': ' .
+                                 "</TD><TD BGCOLOR=\"$color[9]\" VALIGN=TOP colspan=2>" .
+                                    '<B>'._("send").'</B>'.
+                                 '</TD>' .
+                             '</TR>' . "\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       '<TR>' .
+                            "<TD BGCOLOR=\"$color[9]\"  ALIGN=RIGHT VALIGN=TOP>" .
+                                _("Read receipt") . ': '.
+                            "</TD><TD BGCOLOR=\"$color[9]\" VALIGN=TOP colspan=2>" .
+                                '<B>' . _("requested") . "</B>" .
+                            '</TD>' .
+                        '</TR>' . "\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       '<TR>' .
+                            "<TD BGCOLOR=\"$color[9]\"  ALIGN=RIGHT VALIGN=TOP>" .
+                                _("Read receipt") . ': ' .
+                            "</TD><TD BGCOLOR=\"$color[9]\" VALIGN=TOP colspan=2>" .
+                                '<B>' . _("requested") .
+                                "</B> &nbsp; <a href=$url>[" . _("Send read receipt now") . "]</a>" .
+                            '</TD>' .
+                        '</TR>' . "\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 "<script language=\"javascript\">  \n" .
+                    '<!-- ' . "\n" .
+                    "               if (window.confirm(\"" .
+                    _("The message sender has requested a response to indicate that you have read this message. Would you like to send a receipt?") .
+                    "\")) {  \n" .
+                    "                       window.location=($url); \n" .
+                    '                       window.reload()' . "\n" .
+                    '               }' . "\n" .
+                    '// -->' . "\n" .
+                    '</script>' . "\n";
+                }
+                echo       '<TR>' .
+                            "<TD BGCOLOR=\"$color[9]\"  ALIGN=RIGHT VALIGN=TOP>" .
+                                    _("Read receipt") . ': ' .
+                            "</TD><TD BGCOLOR=\"$color[9]\" VALIGN=TOP colspan=2>" .
+                                '<B>' . _("requested") . "&nbsp&nbsp</B><a href=$url>" . '[' .
+                                _("Send read receipt now") . ']  </a>' ." \n" .
+                            '</TD>' .
+                            '</TR>' . "\n";
+                $sendreceipt = '';
+            }
+        }
+
+        if ( !isset( $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 == true ) {
+                    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 "      <TR>\n" .
+                    "         <TD BGCOLOR=\"$color[9]\"  ALIGN=RIGHT VALIGN=TOP>\n" .
+                    "            "._("Read receipt").": \n".
+                    "         </TD><TD BGCOLOR=\"$color[9]\" VALIGN=TOP colspan=2>\n" .
+                    '            <B>'._("send").'</B>'." <a href=$url>" . '[' . _("Remove MDN flag") . ']  </a>'  . "\n" .
+                    '         </TD>' . "\n" .
+                    '     </TR>' . "\n";
+            } else {
+            echo "      <TR>\n" .
+                    "         <TD BGCOLOR=\"$color[9]\"  ALIGN=RIGHT VALIGN=TOP>\n" .
+                    "            "._("Read receipt").": \n".
+                    "         </TD><TD BGCOLOR=\"$color[9]\" VALIGN=TOP colspan=2>\n" .
+                    '            <B>'._("send").'</B>'. "\n" .
+                    '         </TD>' . "\n" .
+                    '     </TR>' . "\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       '<TR>'.
+                              "<TD BGCOLOR=\"$color[9]\"  ALIGN=RIGHT VALIGN=TOP>" .
+                                    _("Read receipt") . ': ' .
+                              "</TD><TD BGCOLOR=\"$color[9]\" VALIGN=TOP colspan=2>" .
+                                 '<B>' . _("requested") .
+                                 "</B> &nbsp; <a href=$url>[" . _("Send read receipt now") . "]</a>" .
+                              '</TD>' .
+                            '</TR>' . "\n";
+            $sendreceipt = '';
+
+        }
+    }
+}
+
 do_hook('read_body_header');
+
 echo '</TABLE>' .
     '   </TD></TR>' .
     '</TABLE>';
@@ -659,18 +956,18 @@ if (($attachment_common_show_images) &&
 
     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 "<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=2 ALIGN=CENTER>\n" .
-            "  <TR>\n" .
-            "    <TD>\n" .
-            "      <img src=\"$imgurl\">\n" .
-            "    </TD>\n" .
-            "  </TR>\n" .
+              '<TR>' .
+                '<TD>' .
+                  "<img src=\"$imgurl\">\n" .
+                "</TD>\n" .
+              "</TR>\n" .
             "</TABLE>\n";
 
     }