- Fix URL for Read Receipts being incorrect in some cases (#1177518).
[squirrelmail.git] / src / read_body.php
CommitLineData
59177427 1<?php
134e4174 2
35586184 3/**
4 * read_body.php
5 *
35586184 6 * This file is used for reading the msgs array and displaying
7 * the resulting emails in the right frame.
8 *
47ccfad4 9 * @copyright &copy; 1999-2006 The SquirrelMail Project Team
4b4abf93 10 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
30967a1e 11 * @version $Id$
8f6f9ba5 12 * @package squirrelmail
a07cd1a4 13 */
35586184 14
30967a1e 15/**
202bcbcc 16 * Include the SquirrelMail initialization file.
30967a1e 17 */
202bcbcc 18require('../include/init.php');
86725763 19
20/* SquirrelMail required files. */
202bcbcc 21
22
86725763 23require_once(SM_PATH . 'functions/imap.php');
202bcbcc 24require_once(SM_PATH . 'functions/imap_asearch.php'); // => move to mailbox_display
86725763 25require_once(SM_PATH . 'functions/mime.php');
26require_once(SM_PATH . 'functions/date.php');
27require_once(SM_PATH . 'functions/url_parser.php');
6d021521 28require_once(SM_PATH . 'functions/identity.php');
202bcbcc 29require_once(SM_PATH . 'functions/arrays.php');
30require_once(SM_PATH . 'functions/mailbox_display.php');
31require_once(SM_PATH . 'functions/forms.php');
32require_once(SM_PATH . 'functions/attachment_common.php');
38c944cc 33
a07cd1a4 34/**
1fca12b5 35 * Given an IMAP message id number, this will look it up in the cached
1e150c97 36 * and sorted msgs array and return the index of the next message
1fca12b5 37 *
1e150c97 38 * @param int $passed_id The current message UID
1fca12b5 39 * @return the index of the next valid message from the array
40 */
e0e30169 41function findNextMessage($uidset,$passed_id='backwards') {
324ac3c5 42 if (!is_array($uidset)) {
43 return -1;
44 }
e0e30169 45 if ($passed_id=='backwards' || !is_array($uidset)) { // check for backwards compattibilty gpg plugin
46 $passed_id = $uidset;
e0e30169 47 }
91c27aee 48 $result = sqm_array_get_value_by_offset($uidset,$passed_id,1);
49 if ($result === false) {
50 return -1;
51 } else {
52 return $result;
10f0ce72 53 }
a07cd1a4 54}
55
1e150c97 56/**
57 * Given an IMAP message id number, this will look it up in the cached
58 * and sorted msgs array and return the index of the previous message
59 *
60 * @param int $passed_id The current message UID
61 * @return the index of the next valid message from the array
62 */
e0e30169 63
64function findPreviousMessage($uidset, $passed_id) {
324ac3c5 65 if (!is_array($uidset)) {
66 return -1;
e0e30169 67 }
91c27aee 68 $result = sqm_array_get_value_by_offset($uidset,$passed_id,-1);
69 if ($result === false) {
70 return -1;
71 } else {
72 return $result;
a07cd1a4 73 }
a07cd1a4 74}
10f0ce72 75
a07cd1a4 76/**
1fca12b5 77 * Displays a link to a page where the message is displayed more
78 * "printer friendly".
1e150c97 79 * @param string $mailbox Name of current mailbox
4669e892 80 * @param int $passed_id
1fca12b5 81 */
1e150c97 82function printer_friendly_link($mailbox, $passed_id, $passed_ent_id) {
4c8986b4 83 global $javascript_on, $show_html_default;
a07cd1a4 84
e2da1d80 85 /* hackydiehack */
86 if( !sqgetGlobalVar('view_unsafe_images', $view_unsafe_images, SQ_GET) ) {
87 $view_unsafe_images = false;
88 } else {
89 $view_unsafe_images = true;
90 }
164584f0 91 $params = '?passed_ent_id=' . urlencode($passed_ent_id) .
c2324b26 92 '&mailbox=' . urlencode($mailbox) .
4c8986b4 93 '&passed_id=' . urlencode($passed_id) .
94 '&view_unsafe_images='. (bool) $view_unsafe_images .
95 '&show_html_default=' . $show_html_default;
10f0ce72 96
a07cd1a4 97 $print_text = _("View Printable Version");
10f0ce72 98
c615b1da 99 $result = '';
a07cd1a4 100 /* Output the link. */
101 if ($javascript_on) {
2c92ea9d 102 $result = '<script type="text/javascript">' . "\n" .
9f42bfc8 103 '<!--' . "\n" .
104 " function printFormat() {\n" .
105 ' window.open("../src/printer_friendly_main.php' .
106 $params . '","Print","width=800,height=600");' . "\n".
107 " }\n" .
108 "// -->\n" .
109 "</script>\n" .
110 "<a href=\"javascript:printFormat();\">$print_text</a>\n";
a07cd1a4 111 } else {
c2324b26 112 $result = '<a target="_blank" href="../src/printer_friendly_bottom.php' .
9f42bfc8 113 "$params\">$print_text</a>\n";
a07cd1a4 114 }
d9c1dccc 115 return $result;
a07cd1a4 116}
117
7277191e 118function view_as_html_link($mailbox, $passed_id, $passed_ent_id, $message) {
119 global $base_uri, $show_html_default;
120
121 $has_html = false;
122 if ($message->header->type0 == 'message' && $message->header->type1 == 'rfc822') {
123 $type0 = $message->rfc822_header->content_type->type0;
124 $type1 = $message->rfc822_header->content_type->type1;
125 } else {
126 $type0 = $message->header->type0;
127 $type1 = $message->header->type1;
128 }
129 if($type0 == 'multipart' &&
130 ($type1 == 'alternative' || $type1 == 'mixed' || $type1 == 'related')) {
131 if ($message->findDisplayEntity(array(), array('text/html'), true)) {
132 $has_html = true;
133 }
134 }
135 /*
136 * Normal single part message so check its type.
137 */
138 else {
139 if($type0 == 'text' && $type1 == 'html') {
140 $has_html = true;
141 }
142 }
143 if($has_html == true) {
202bcbcc 144 $vars = array('passed_ent_id', 'show_more', 'show_more_cc', 'override_type0', 'override_type1', 'startMessage','where', 'what');
7277191e 145
146 $new_link = $base_uri . 'src/read_body.php?passed_id=' . urlencode($passed_id) .
147 '&amp;passed_ent_id=' . urlencode($passed_ent_id) .
148 '&amp;mailbox=' . urlencode($mailbox);
149 foreach($vars as $var) {
150 if(sqgetGlobalVar($var, $temp)) {
151 $new_link .= '&amp;' . $var . '=' . urlencode($temp);
152 }
153 }
154
155 if($show_html_default == 1) {
156 $new_link .= '&amp;show_html_default=0';
157 $link = _("View as plain text");
158 } else {
159 $new_link .= '&amp;show_html_default=1';
160 $link = _("View as HTML");
161 }
162 return '&nbsp;|&nbsp<a href="' . $new_link . '">' . $link . '</a>';
163 }
164 return '';
165}
166
4669e892 167function ServerMDNSupport($aFlags) {
168 /* escaping $ doesn't work -> \x36 */
c075fcfe 169 return ( in_array('$mdnsent',$aFlags,true) ||
170 in_array('\\*',$aFlags,true) ) ;
57257333 171}
172
fc224f68 173function SendMDN ( $mailbox, $passed_id, $sender, $message, $imapConnection) {
8d8da447 174 global $username, $attachment_dir, $popuser, $username, $color,
ce68b76b 175 $version, $squirrelmail_language, $default_charset,
176 $languages, $useSendmail, $domain, $sent_folder;
57257333 177
e95c04ec 178 sqgetGlobalVar('SERVER_NAME', $SERVER_NAME, SQ_SERVER);
0b97a708 179
38bca81c 180 $header = $message->rfc822_header;
57257333 181
fc224f68 182 $rfc822_header = new Rfc822Header();
d9c1dccc 183 $content_type = new ContentType('multipart/report');
fc224f68 184 $content_type->properties['report-type']='disposition-notification';
d9c1dccc 185
fc224f68 186 set_my_charset();
187 if ($default_charset) {
d9c1dccc 188 $content_type->properties['charset']=$default_charset;
fc224f68 189 }
190 $rfc822_header->content_type = $content_type;
191 $rfc822_header->to[] = $header->dnt;
a20855e4 192 $rfc822_header->subject = _("Read:") . ' ' . encodeHeader($header->subject);
fc224f68 193
27a1d10a 194 // Patch #793504 Return Receipt Failing with <@> from Tim Craig (burny_md)
195 // This merely comes from compose.php and only happens when there is no
196 // email_addr specified in user's identity (which is the startup config)
197 if (ereg("^([^@%/]+)[@%/](.+)$", $username, $usernamedata)) {
198 $popuser = $usernamedata[1];
199 $domain = $usernamedata[2];
200 unset($usernamedata);
201 } else {
202 $popuser = $username;
203 }
fc224f68 204
205 $reply_to = '';
6d021521 206 $ident = get_identities();
207 if(!isset($identity)) $identity = 0;
208 $full_name = $ident[$identity]['full_name'];
209 $from_mail = $ident[$identity]['email_address'];
210 $from_addr = '"'.$full_name.'" <'.$from_mail.'>';
211 $reply_to = $ident[$identity]['reply_to'];
212
27a1d10a 213 if (!$from_mail) {
214 $from_mail = "$popuser@$domain";
215 $from_addr = $from_mail;
fc224f68 216 }
217 $rfc822_header->from = $rfc822_header->parseAddress($from_addr,true);
218 if ($reply_to) {
219 $rfc822_header->reply_to = $rfc822_header->parseAddress($reply_to,true);
220 }
d9c1dccc 221
57257333 222 // part 1 (RFC2298)
57257333 223 $senton = getLongDateString( $header->date );
224 $to_array = $header->to;
225 $to = '';
226 foreach ($to_array as $line) {
af568a82 227 $to .= ' '.$line->getAddress();
57257333 228 }
57257333 229 $now = getLongDateString( time() );
78db1583 230 set_my_charset();
46bb8da8 231 $body = _("Your message") . "\r\n\r\n" .
48027e89 232 "\t" . _("To") . ': ' . decodeHeader($to,false,false) . "\r\n" .
233 "\t" . _("Subject") . ': ' . decodeHeader($header->subject,false,false) . "\r\n" .
234 "\t" . _("Sent") . ': ' . $senton . "\r\n" .
46bb8da8 235 "\r\n" .
236 sprintf( _("Was displayed on %s"), $now );
f69feefe 237
fc224f68 238 $special_encoding = '';
4669e892 239 if (isset($languages[$squirrelmail_language]['XTRA_CODE']) &&
f4bb5d22 240 function_exists($languages[$squirrelmail_language]['XTRA_CODE'] . '_encode')) {
241 $body = call_user_func($languages[$squirrelmail_language]['XTRA_CODE'] . '_encode', $body);
d9c1dccc 242 if (strtolower($default_charset) == 'iso-2022-jp') {
243 if (mb_detect_encoding($body) == 'ASCII') {
244 $special_encoding = '8bit';
245 } else {
246 $body = mb_convert_encoding($body, 'JIS');
247 $special_encoding = '7bit';
248 }
249 }
21461ca4 250 } elseif (sq_is8bit($body)) {
251 $special_encoding = '8bit';
6fbd125b 252 }
fc224f68 253 $part1 = new Message();
254 $part1->setBody($body);
255 $mime_header = new MessageHeader;
256 $mime_header->type0 = 'text';
257 $mime_header->type1 = 'plain';
258 if ($special_encoding) {
259 $mime_header->encoding = $special_encoding;
d9c1dccc 260 } else {
fc224f68 261 $mime_header->encoding = 'us-ascii';
262 }
263 if ($default_charset) {
264 $mime_header->parameters['charset'] = $default_charset;
265 }
266 $part1->mime_header = $mime_header;
267
57257333 268 // part2 (RFC2298)
d9c1dccc 269 $original_recipient = $to;
57257333 270 $original_message_id = $header->message_id;
271
fc224f68 272 $report = "Reporting-UA : $SERVER_NAME ; SquirrelMail (version $version) \r\n";
57257333 273 if ($original_recipient != '') {
fc224f68 274 $report .= "Original-Recipient : $original_recipient\r\n";
57257333 275 }
276 $final_recipient = $sender;
fc224f68 277 $report .= "Final-Recipient: rfc822; $final_recipient\r\n" .
57257333 278 "Original-Message-ID : $original_message_id\r\n" .
279 "Disposition: manual-action/MDN-sent-manually; displayed\r\n";
280
fc224f68 281 $part2 = new Message();
282 $part2->setBody($report);
283 $mime_header = new MessageHeader;
284 $mime_header->type0 = 'message';
285 $mime_header->type1 = 'disposition-notification';
286 $mime_header->encoding = 'us-ascii';
287 $part2->mime_header = $mime_header;
288
289 $composeMessage = new Message();
290 $composeMessage->rfc822_header = $rfc822_header;
291 $composeMessage->addEntity($part1);
292 $composeMessage->addEntity($part2);
293
294
d9c1dccc 295 if ($useSendmail) {
296 require_once(SM_PATH . 'class/deliver/Deliver_SendMail.class.php');
297 global $sendmail_path;
298 $deliver = new Deliver_SendMail();
299 $stream = $deliver->initStream($composeMessage,$sendmail_path);
fc224f68 300 } else {
d9c1dccc 301 require_once(SM_PATH . 'class/deliver/Deliver_SMTP.class.php');
302 $deliver = new Deliver_SMTP();
ce68b76b 303 global $smtpServerAddress, $smtpPort, $pop_before_smtp;
d9c1dccc 304 $authPop = (isset($pop_before_smtp) && $pop_before_smtp) ? true : false;
9bd3b1e6 305 get_smtp_user($user, $pass);
d9c1dccc 306 $stream = $deliver->initStream($composeMessage,$domain,0,
70ce2218 307 $smtpServerAddress, $smtpPort, $user, $pass, $authPop);
d9c1dccc 308 }
309 $success = false;
fc224f68 310 if ($stream) {
d9c1dccc 311 $length = $deliver->mail($composeMessage, $stream);
312 $success = $deliver->finalizeStream($stream);
fc224f68 313 }
d9c1dccc 314 if (!$success) {
a15f9d93 315 $msg = $deliver->dlv_msg;
316 if (! empty($deliver->dlv_server_msg)) {
317 $msg.= '<br />' .
0cc4fb0d 318 _("Server replied:") . ' ' . $deliver->dlv_ret_nr . ' ' .
a15f9d93 319 nl2br(htmlspecialchars($deliver->dlv_server_msg));
320 }
fc224f68 321 plain_error_message($msg, $color);
322 } else {
323 unset ($deliver);
d9c1dccc 324 if (sqimap_mailbox_exists ($imapConnection, $sent_folder)) {
81de00c0 325 $sid = sqimap_append ($imapConnection, $sent_folder, $length);
d9c1dccc 326 require_once(SM_PATH . 'class/deliver/Deliver_IMAP.class.php');
327 $imap_deliver = new Deliver_IMAP();
328 $imap_deliver->mail($composeMessage, $imapConnection);
81de00c0 329 sqimap_append_done ($imapConnection, $sent_folder);
d9c1dccc 330 unset ($imap_deliver);
331 }
332 }
333 return $success;
57257333 334}
335
6201339c 336function ToggleMDNflag ($set ,$imapConnection, $mailbox, $passed_id) {
d9c1dccc 337 $sg = $set?'+':'-';
338 $cmd = 'STORE ' . $passed_id . ' ' . $sg . 'FLAGS ($MDNSent)';
4669e892 339 $read = sqimap_run_command ($imapConnection, $cmd, true, $response,
6201339c 340 $readmessage, TRUE);
57257333 341}
342
4d0cd98b 343function formatRecipientString($recipients, $item ) {
d9c1dccc 344 global $show_more_cc, $show_more, $show_more_bcc,
345 $PHP_SELF;
4d0cd98b 346
d9c1dccc 347 $string = '';
38c944cc 348 if ((is_array($recipients)) && (isset($recipients[0]))) {
d9c1dccc 349 $show = false;
38c944cc 350
351 if ($item == 'to') {
d9c1dccc 352 if ($show_more) {
353 $show = true;
354 $url = set_url_var($PHP_SELF, 'show_more',0);
355 } else {
356 $url = set_url_var($PHP_SELF, 'show_more',1);
357 }
358 } else if ($item == 'cc') {
359 if ($show_more_cc) {
360 $show = true;
361 $url = set_url_var($PHP_SELF, 'show_more_cc',0);
362 } else {
363 $url = set_url_var($PHP_SELF, 'show_more_cc',1);
364 }
365 } else if ($item == 'bcc') {
366 if ($show_more_bcc) {
367 $show = true;
368 $url = set_url_var($PHP_SELF, 'show_more_bcc',0);
369 } else {
370 $url = set_url_var($PHP_SELF, 'show_more_bcc',1);
371 }
372 }
373
374 $cnt = count($recipients);
375 foreach($recipients as $r) {
a91189d6 376 $add = decodeHeader($r->getAddress(true));
d9c1dccc 377 if ($string) {
3c621ba1 378 $string .= '<br />' . $add;
d9c1dccc 379 } else {
380 $string = $add;
381 if ($cnt > 1) {
3c621ba1 382 $string .= '&nbsp;(<a href="'.$url;
d9c1dccc 383 if ($show) {
3c621ba1 384 $string .= '">'._("less").'</a>)';
d9c1dccc 385 } else {
3c621ba1 386 $string .= '">'._("more").'</a>)';
d9c1dccc 387 break;
388 }
389 }
390 }
1fca12b5 391 }
4d0cd98b 392 }
c615b1da 393 return $string;
394}
395
e0e30169 396function formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message,
af568a82 397 $color, $FirstTimeSee) {
ce68b76b 398 global $default_use_mdn, $default_use_priority,
77836429 399 $show_xmailer_default, $mdn_user_support, $PHP_SELF, $javascript_on,
134e4174 400 $squirrelmail_language;
38bca81c 401
134e4174 402 $mailbox = $aMailbox['NAME'];
e0e30169 403
d9c1dccc 404 $header = $message->rfc822_header;
405 $env = array();
bdb9ce72 406 $env[_("Subject")] = str_replace("&nbsp;"," ",decodeHeader($header->subject));
7893c8a5 407
d9c1dccc 408 $from_name = $header->getAddr_s('from');
d6b6d221 409 if (!$from_name)
d9c1dccc 410 $from_name = $header->getAddr_s('sender');
d6b6d221 411 if (!$from_name)
412 $env[_("From")] = _("Unknown sender");
413 else
414 $env[_("From")] = decodeHeader($from_name);
d9c1dccc 415 $env[_("Date")] = getLongDateString($header->date);
416 $env[_("To")] = formatRecipientString($header->to, "to");
417 $env[_("Cc")] = formatRecipientString($header->cc, "cc");
418 $env[_("Bcc")] = formatRecipientString($header->bcc, "bcc");
419 if ($default_use_priority) {
0e8006dc 420 $env[_("Priority")] = htmlspecialchars(getPriorityStr($header->priority));
d9c1dccc 421 }
422 if ($show_xmailer_default) {
a91189d6 423 $env[_("Mailer")] = decodeHeader($header->xmailer);
d9c1dccc 424 }
425 if ($default_use_mdn) {
426 if ($mdn_user_support) {
427 if ($header->dnt) {
428 if ($message->is_mdnsent) {
509ce88e 429 $env[_("Read receipt")] = _("sent");
d9c1dccc 430 } else {
4669e892 431 $env[_("Read receipt")] = _("requested");
432 if (!(handleAsSent($mailbox) ||
d9c1dccc 433 $message->is_deleted ||
434 $passed_ent_id)) {
bfb55134 435 $mdn_url = $PHP_SELF;
436 $mdn_url = set_url_var($PHP_SELF, 'mailbox', urlencode($mailbox));
437 $mdn_url = set_url_var($PHP_SELF, 'passed_id', $passed_id);
438 $mdn_url = set_url_var($PHP_SELF, 'passed_ent_id', $passed_ent_id);
439 $mdn_url = set_url_var($PHP_SELF, 'sendreceipt', 1);
d9c1dccc 440 if ($FirstTimeSee && $javascript_on) {
2c92ea9d 441 $script = '<script type="text/javascript">' . "\n";
d9c1dccc 442 $script .= '<!--'. "\n";
443 $script .= 'if(window.confirm("' .
444 _("The message sender has requested a response to indicate that you have read this message. Would you like to send a receipt?") .
445 '")) { '."\n" .
446 ' sendMDN()'.
447 '}' . "\n";
448 $script .= '// -->'. "\n";
449 $script .= '</script>'. "\n";
450 echo $script;
451 }
452 $env[_("Read receipt")] .= '&nbsp;<a href="' . $mdn_url . '">[' .
453 _("Send read receipt now") . ']</a>';
454 }
455 }
456 }
457 }
458 }
c615b1da 459
3c621ba1 460 $s = '<table width="100%" cellpadding="0" cellspacing="2" border="0"';
461 $s .= ' align="center" bgcolor="'.$color[0].'">';
d9c1dccc 462 foreach ($env as $key => $val) {
463 if ($val) {
3c621ba1 464 $s .= '<tr>';
465 $s .= html_tag('td', '<b>' . $key . ':&nbsp;&nbsp;</b>', 'right', '', 'valign="top" width="20%"') . "\n";
466 $s .= html_tag('td', $val, 'left', '', 'valign="top" width="80%"') . "\n";
467 $s .= '</tr>';
d9c1dccc 468 }
469 }
3c621ba1 470 echo '<table bgcolor="'.$color[9].'" width="100%" cellpadding="1"'.
471 ' cellspacing="0" border="0" align="center">'."\n";
472 echo '<tr><td height="5" colspan="2" bgcolor="'.
473 $color[4].'"></td></tr><tr><td align="center">'."\n";
d9c1dccc 474 echo $s;
00ac2f42 475 do_hook('read_body_header');
d9c1dccc 476 formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color);
3c621ba1 477 echo '</table>';
478 echo '</td></tr><tr><td height="5" colspan="2" bgcolor="'.$color[4].'"></td></tr>'."\n";
479 echo '</table>';
d9c1dccc 480}
c615b1da 481
1e150c97 482/**
4669e892 483 * Format message toolbar
484 *
1e150c97 485 * @param string $mailbox Name of current mailbox
486 * @param int $passed_id UID of current message
487 * @param int $passed_ent_id Id of entity within message
488 * @param object $message Current message object
489 * @param object $mbx_response
490 */
324ac3c5 491function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removedVar, $nav_on_top = TRUE) {
a94c1db1 492 global $base_uri, $draft_folder, $where, $what, $color, $sort,
4669e892 493 $startMessage, $PHP_SELF, $save_as_draft,
1e150c97 494 $enable_forward_as_attachment, $imapConnection, $lastTargetMailbox,
24bb7e49 495 $username, $delete_prev_next_display, $show_copy_buttons,
91c27aee 496 $compose_new_win, $javascript_on, $compose_width, $compose_height;
c615b1da 497
e0e30169 498 //FIXME cleanup argument list, use $aMailbox where possible
499 $mailbox = $aMailbox['NAME'];
500
d9c1dccc 501 $topbar_delimiter = '&nbsp;|&nbsp;';
1e150c97 502 $double_delimiter = '&nbsp;&nbsp;&nbsp;&nbsp;';
d9c1dccc 503 $urlMailbox = urlencode($mailbox);
c615b1da 504
1e150c97 505 $msgs_url = $base_uri . 'src/';
2ffa3f57 506
1e150c97 507 // BEGIN NAV ROW - PREV/NEXT, DEL PREV/NEXT, LINKS TO INDEX, etc.
45c1ed84 508 $nav_row = '<tr><td align="left" colspan="2" style="border: 1px solid '.$color[9].';"><small>';
e55c441a 509
1e150c97 510 // Create Prev & Next links
511 // Handle nested entities first (i.e. Mime Attach parts)
512 if (isset($passed_ent_id) && $passed_ent_id) {
513 // code for navigating through attached message/rfc822 messages
d9c1dccc 514 $url = set_url_var($PHP_SELF, 'passed_ent_id',0);
70bdc740 515 $entities = array();
516 $entity_count = array();
517 $c = 0;
f2f03410 518
70bdc740 519 foreach($message->parent->entities as $ent) {
9f42bfc8 520 if ($ent->type0 == 'message' && $ent->type1 == 'rfc822') {
521 $c++;
522 $entity_count[$c] = $ent->entity_id;
523 $entities[$ent->entity_id] = $c;
524 }
70bdc740 525 }
1e150c97 526
70bdc740 527 $prev_link = _("Previous");
91c27aee 528 if(isset($entities[$passed_ent_id]) && $entities[$passed_ent_id] > 1) {
70bdc740 529 $prev_ent_id = $entity_count[$entities[$passed_ent_id] - 1];
530 $prev_link = '<a href="'
531 . set_url_var($PHP_SELF, 'passed_ent_id', $prev_ent_id)
532 . '">' . $prev_link . '</a>';
533 }
1e150c97 534
535 $next_link = _("Next");
91c27aee 536 if(isset($entities[$passed_ent_id]) && $entities[$passed_ent_id] < $c) {
70bdc740 537 $next_ent_id = $entity_count[$entities[$passed_ent_id] + 1];
538 $next_link = '<a href="'
539 . set_url_var($PHP_SELF, 'passed_ent_id', $next_ent_id)
540 . '">' . $next_link . '</a>';
541 }
1e150c97 542
d9c1dccc 543 $par_ent_id = $message->parent->entity_id;
1e150c97 544 $up_link = '';
d9c1dccc 545 if ($par_ent_id) {
546 $par_ent_id = substr($par_ent_id,0,-2);
1e150c97 547 if ( $par_ent_id != 0 ) {
548 $up_link = $topbar_delimiter;
549 $url = set_url_var($PHP_SELF, 'passed_ent_id',$par_ent_id);
550 $up_link .= '<a href="'.$url.'">'._("Up").'</a>';
551 }
552 }
553
554 $nav_row .= $prev_link . $up_link . $topbar_delimiter . $next_link;
abafb676 555 $nav_row .= $double_delimiter . '[<a href="'.$url.'">'._("View Message").'</a>]';
1e150c97 556
557 // Prev/Next links for regular messages
324ac3c5 558 } else if ( true ) { //!(isset($where) && isset($what)) ) {
324ac3c5 559 $prev = findPreviousMessage($aMailbox['UIDSET'][$what], $passed_id);
560 $next = findNextMessage($aMailbox['UIDSET'][$what],$passed_id);
1e150c97 561
562 $prev_link = _("Previous");
563 if ($prev >= 0) {
564 $uri = $base_uri . 'src/read_body.php?passed_id='.$prev.
565 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
324ac3c5 566 "&amp;where=$where&amp;what=$what" .
1e150c97 567 '&amp;startMessage='.$startMessage.'&amp;show_more=0';
568 $prev_link = '<a href="'.$uri.'">'.$prev_link.'</a>';
d9c1dccc 569 }
1e150c97 570
571 $next_link = _("Next");
572 if ($next >= 0) {
573 $uri = $base_uri . 'src/read_body.php?passed_id='.$next.
574 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
324ac3c5 575 "&amp;where=$where&amp;what=$what" .
1e150c97 576 '&amp;startMessage='.$startMessage.'&amp;show_more=0';
577 $next_link = '<a href="'.$uri.'">'.$next_link.'</a>';
578 }
579
1e150c97 580 // Only bother with Delete & Prev and Delete & Next IF
6201339c 581 // top display is enabled.
4669e892 582 if ( $delete_prev_next_display == 1 &&
324ac3c5 583 in_array('\\deleted', $aMailbox['PERMANENTFLAGS'],true) ) {
407e7032 584 $del_prev_link = _("Delete &amp; Prev");
1e150c97 585 if ($prev >= 0) {
586 $uri = $base_uri . 'src/read_body.php?passed_id='.$prev.
587 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
588 '&amp;startMessage='.$startMessage.'&amp;show_more=0'.
324ac3c5 589 "&amp;where=$where&amp;what=$what" .
1e150c97 590 '&amp;delete_id='.$passed_id;
4669e892 591 $del_prev_link = '<a href="'.$uri.'">'.$del_prev_link.'</a>';
1e150c97 592 }
593
407e7032 594 $del_next_link = _("Delete &amp; Next");
1e150c97 595 if ($next >= 0) {
596 $uri = $base_uri . 'src/read_body.php?passed_id='.$next.
597 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
598 '&amp;startMessage='.$startMessage.'&amp;show_more=0'.
324ac3c5 599 "&amp;where=$where&amp;what=$what" .
1e150c97 600 '&amp;delete_id='.$passed_id;
45c1ed84 601 $del_next_link = '<a href="'.$uri.'">'.$del_next_link.'</a>';
1e150c97 602 }
1e150c97 603 }
45c1ed84 604
abafb676 605 $nav_row .= '['.$prev_link.$topbar_delimiter.$next_link.']';
606 if ( isset($del_prev_link) && isset($del_next_link) )
607 $nav_row .= $double_delimiter.'['.$del_prev_link.$topbar_delimiter.$del_next_link.']';
1e150c97 608 }
609
610 // Start with Search Results or Message List link.
324ac3c5 611 $msgs_url .= "$where?where=read_body.php&amp;what=$what&amp;mailbox=" . $urlMailbox.
612 "&amp;startMessage=$startMessage";
613 if ($where == 'search.php') {
1e150c97 614 $msgs_str = _("Search Results");
615 } else {
1e150c97 616 $msgs_str = _("Message List");
617 }
618 $nav_row .= $double_delimiter .
abafb676 619 '[<a href="' . $msgs_url . '">' . $msgs_str . '</a>]';
1e150c97 620
621 $nav_row .= '</small></td></tr>';
622
623
624 // BEGIN MENU ROW - DELETE/REPLY/FORWARD/MOVE/etc.
ad2ee09d 625 $menu_row = '<tr bgcolor="'.$color[0].'"><td><small>';
98a9cc03 626 $comp_uri = $base_uri.'src/compose.php' .
627 '?passed_id=' . $passed_id .
628 '&amp;mailbox=' . $urlMailbox .
629 '&amp;startMessage=' . $startMessage .
630 (isset($passed_ent_id) ? '&amp;passed_ent_id='.$passed_ent_id : '');
4669e892 631
632 // Start form for reply/reply all/forward..
1a531551 633 $target = '';
634 $on_click='';
ee66175d 635 $method='method="post" ';
6190378c 636 $onsubmit='';
1a531551 637 if ($compose_new_win == '1') {
91c27aee 638 if (!preg_match("/^[0-9]{3,4}$/", $compose_width)) {
639 $compose_width = '640';
640 }
641 if (!preg_match("/^[0-9]{3,4}$/", $compose_height)) {
642 $compose_height = '550';
643 }
1a531551 644 if ( $javascript_on ) {
91c27aee 645 $on_click=' onclick="comp_in_new_form(\''.$comp_uri.'\', this, this.form,'. $compose_width .',' . $compose_height .')"';
1a531551 646 $comp_uri = 'javascript:void(0)';
ee66175d 647 $method='method="get" ';
6190378c 648 $onsubmit = 'onsubmit="return false" ';
1a531551 649 } else {
650 $target = 'target="_blank"';
1a531551 651 }
652 }
653
6190378c 654 $menu_row .= "\n".'<form name="composeForm" action="'.$comp_uri.'" '
655 . $method.$target.$onsubmit.' style="display: inline">'."\n";
98a9cc03 656
1e150c97 657 // If Draft folder - create Resume link
658 if (($mailbox == $draft_folder) && ($save_as_draft)) {
1a531551 659 $new_button = 'smaction_draft';
1e150c97 660 $comp_alt_string = _("Resume Draft");
661 } else if (handleAsSent($mailbox)) {
662 // If in Sent folder, edit as new
1a531551 663 $new_button = 'smaction_edit_new';
1e150c97 664 $comp_alt_string = _("Edit Message as New");
665 }
1e150c97 666 // Show Alt URI for Draft/Sent
98a9cc03 667 if (isset($comp_alt_string))
e1728a7a 668 $menu_row .= getButton('submit', $new_button, $comp_alt_string, $on_click) . "\n";
1e150c97 669
e1728a7a 670 $menu_row .= getButton('submit', 'smaction_reply', _("Reply"), $on_click) . "\n";
671 $menu_row .= getButton('submit', 'smaction_reply_all', _("Reply All"), $on_click) ."\n";
672 $menu_row .= getButton('submit', 'smaction_forward', _("Forward"), $on_click);
98a9cc03 673 if ($enable_forward_as_attachment)
ff0969a0 674 $menu_row .= '<input type="checkbox" name="smaction_attache" />' . _("As Attachment") .'&nbsp;&nbsp;'."\n";
1e150c97 675
51eb014b 676 $menu_row .= '</form>&nbsp;';
c615b1da 677
324ac3c5 678 if ( in_array('\\deleted', $aMailbox['PERMANENTFLAGS'],true) ) {
679 // Form for deletion. Form is handled by the originating display in $where. This is right_main.php or search.php
680 $delete_url = $base_uri . "src/$where";
25e57ed2 681 $menu_row .= '<form name="deleteMessageForm" action="'.$delete_url.'" method="post" style="display: inline">';
a128c967 682
4669e892 683 if (!(isset($passed_ent_id) && $passed_ent_id)) {
324ac3c5 684 $menu_row .= addHidden('mailbox', $aMailbox['NAME']);
685 $menu_row .= addHidden('msg[0]', $passed_id);
7fcab811 686 $menu_row .= addHidden('startMessage', $startMessage);
e1728a7a 687 $menu_row .= getButton('submit', 'delete', _("Delete"));
ff0969a0 688 $menu_row .= '<input type="checkbox" name="bypass_trash" />' . _("Bypass Trash");
324ac3c5 689 } else {
e1728a7a 690 $menu_row .= getButton('submit', 'delete', _("Delete"), '', FALSE) . "\n"; // delete button is disabled
abafb676 691 }
abafb676 692
4669e892 693 $menu_row .= '</form>';
694 }
abafb676 695
1e150c97 696 // Add top move link
697 $menu_row .= '</small></td><td align="right">';
4669e892 698 if ( !(isset($passed_ent_id) && $passed_ent_id) &&
324ac3c5 699 in_array('\\deleted', $aMailbox['PERMANENTFLAGS'],true) ) {
b2811304 700
25e57ed2 701 $menu_row .= '<form name="moveMessageForm" action="'.$base_uri.'src/'.$where.'?'.'" method="post" style="display: inline">'.
64c9e87e 702 '<small>'.
324ac3c5 703
704 addHidden('mailbox',$aMailbox['NAME']) .
705 addHidden('msg[0]', $passed_id) . _("Move to:") .
1e150c97 706 '<select name="targetMailbox" style="padding: 0px; margin: 0px">';
b2811304 707
1e150c97 708 if (isset($lastTargetMailbox) && !empty($lastTargetMailbox)) {
709 $menu_row .= sqimap_mailbox_option_list($imapConnection, array(strtolower($lastTargetMailbox)));
710 } else {
711 $menu_row .= sqimap_mailbox_option_list($imapConnection);
712 }
b2811304 713 $menu_row .= '</select> ';
714
24bb7e49 715 $menu_row .= getButton('submit', 'moveButton',_("Move")) . "\n";
716
717 // Add msg copy button
718 if ($show_copy_buttons) {
719 $menu_row .= getButton('submit', 'copyButton', _("Copy"));
720 }
721
722 $menu_row .= '</form>';
1e150c97 723 }
724 $menu_row .= '</td></tr>';
d9c1dccc 725
1e150c97 726 // echo rows, with hooks
764971df 727 $ret = do_hook_function('read_body_menu_top', array($nav_row, $menu_row));
988e24f6 728 if (is_array($ret)) {
729 if (isset($ret[0]) && !empty($ret[0])) {
730 $nav_row = $ret[0];
731 }
732 if (isset($ret[1]) && !empty($ret[1])) {
733 $menu_row = $ret[1];
734 }
764971df 735 }
1e150c97 736 echo '<table width="100%" cellpadding="3" cellspacing="0" align="center" border="0">';
737 echo $nav_on_top ? $nav_row . $menu_row : $menu_row . $nav_row;
738 echo '</table>'."\n";
d62c4938 739 do_hook('read_body_menu_bottom');
c615b1da 740}
741
742function formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color) {
40a34e57 743 global $base_uri, $where, $what, $download_and_unsafe_link;
4669e892 744
d9c1dccc 745 $urlMailbox = urlencode($mailbox);
78909469 746 $urlPassed_id = urlencode($passed_id);
747 $urlPassed_ent_id = urlencode($passed_ent_id);
4669e892 748
78909469 749 $query_string = 'mailbox=' . $urlMailbox . '&amp;passed_id=' . $urlPassed_id . '&amp;passed_ent_id=' . $urlPassed_ent_id;
4669e892 750
78909469 751 if (!empty($where)) {
752 $query_string .= '&amp;where=' . urlencode($where);
753 }
754
755 if (!empty($what)) {
756 $query_string .= '&amp;what=' . urlencode($what);
757 }
758
e95c04ec 759 $url = $base_uri.'src/view_header.php?'.$query_string;
d9c1dccc 760
3c621ba1 761 $s = "<tr>\n" .
762 html_tag( 'td', '', 'right', '', 'valign="middle" width="20%"' ) . '<b>' . _("Options") . ":&nbsp;&nbsp;</b></td>\n" .
763 html_tag( 'td', '', 'left', '', 'valign="middle" width="80%"' ) . '<small>' .
d9c1dccc 764 '<a href="'.$url.'">'._("View Full Header").'</a>';
765
766 /* Output the printer friendly link if we are in subtle mode. */
767 $s .= '&nbsp;|&nbsp;' .
1e150c97 768 printer_friendly_link($mailbox, $passed_id, $passed_ent_id);
d9c1dccc 769 echo $s;
7277191e 770 echo view_as_html_link($mailbox, $passed_id, $passed_ent_id, $message);
40a34e57 771
772 /* Output the download and/or unsafe images link/-s, if any. */
773 if ($download_and_unsafe_link) {
774 echo $download_and_unsafe_link;
775 }
776
d9c1dccc 777 do_hook("read_body_header_right");
3c621ba1 778 $s = "</small></td>\n" .
779 "</tr>\n";
d9c1dccc 780 echo $s;
a128c967 781
4d0cd98b 782}
783
91c27aee 784/**
785 * Creates button
786 *
787 * @deprecated see form functions available in 1.5.1 and 1.4.3.
788 * @param string $type
789 * @param string $name
790 * @param string $value
791 * @param string $js
792 * @param bool $enabled
793 */
794function getButton($type, $name, $value, $js = '', $enabled = TRUE) {
795 $disabled = ( $enabled ? '' : 'disabled ' );
796 $js = ( $js ? $js.' ' : '' );
797 return '<input '.$disabled.$js.
798 'type="'.$type.
799 '" name="'.$name.
800 '" value="'.$value .
801 '" style="padding: 0px; margin: 0px" />';
802}
803
804
6206f6c4 805/***************************/
2ffa3f57 806/* Main of read_body.php */
6206f6c4 807/***************************/
57257333 808
0b97a708 809/* get the globals we may need */
810
1e12d1ff 811sqgetGlobalVar('key', $key, SQ_COOKIE);
e95c04ec 812sqgetGlobalVar('username', $username, SQ_SESSION);
813sqgetGlobalVar('onetimepad',$onetimepad, SQ_SESSION);
e95c04ec 814sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION);
1e12d1ff 815sqgetGlobalVar('base_uri', $base_uri, SQ_SESSION);
e95c04ec 816sqgetGlobalVar('lastTargetMailbox', $lastTargetMailbox, SQ_SESSION);
e95c04ec 817if (!sqgetGlobalVar('messages', $messages, SQ_SESSION) ) {
818 $messages = array();
ce274df9 819}
81de00c0 820sqgetGlobalVar('delayed_errors', $delayed_errors, SQ_SESSION);
821if (is_array($delayed_errors)) {
822 $oErrorHandler->AssignDelayedErrors($delayed_errors);
823 sqsession_unregister("delayed_errors");
824}
e95c04ec 825/** GET VARS */
826sqgetGlobalVar('sendreceipt', $sendreceipt, SQ_GET);
324ac3c5 827if (!sqgetGlobalVar('where', $where, SQ_GET) ) {
828 $where = 'right_main.php';
829}
d0b119a5 830/*
831 * Used as entry key to the list of uid's cached in the mailbox cache
832 * we use the cached uid's to get the next and prev message.
833 */
324ac3c5 834if (!sqgetGlobalVar('what', $what, SQ_GET) ){
835 $what = 0;
836}
e95c04ec 837if ( sqgetGlobalVar('show_more', $temp, SQ_GET) ) {
838 $show_more = (int) $temp;
1b9f3c04 839}
e95c04ec 840if ( sqgetGlobalVar('show_more_cc', $temp, SQ_GET) ) {
841 $show_more_cc = (int) $temp;
0b97a708 842}
e95c04ec 843if ( sqgetGlobalVar('show_more_bcc', $temp, SQ_GET) ) {
844 $show_more_bcc = (int) $temp;
0b97a708 845}
e95c04ec 846if ( sqgetGlobalVar('view_hdr', $temp, SQ_GET) ) {
847 $view_hdr = (int) $temp;
0b97a708 848}
e95c04ec 849
91c27aee 850if ( sqgetGlobalVar('account', $temp, SQ_GET) ) {
851 $iAccount = (int) $temp;
852} else {
853 $iAccount = 0;
854}
855
e95c04ec 856/** GET/POST VARS */
857sqgetGlobalVar('passed_ent_id', $passed_ent_id);
858sqgetGlobalVar('mailbox', $mailbox);
859
860if ( sqgetGlobalVar('passed_id', $temp) ) {
861 $passed_id = (int) $temp;
0b97a708 862}
e95c04ec 863if ( sqgetGlobalVar('sort', $temp) ) {
864 $sort = (int) $temp;
0b97a708 865}
e95c04ec 866if ( sqgetGlobalVar('startMessage', $temp) ) {
867 $startMessage = (int) $temp;
324ac3c5 868} else {
869 $startMessage = 1;
ce274df9 870}
7277191e 871if(sqgetGlobalVar('show_html_default', $temp)) {
872 $show_html_default = (int) $temp;
873}
874
875if(sqgetGlobalVar('view_unsafe_images', $temp)) {
876 $view_unsafe_images = (int) $temp;
877 if($view_unsafe_images == 1) {
878 $show_html_default = 1;
879 }
880} else {
881 $view_unsafe_images = 0;
882}
324ac3c5 883/**
884 * Retrieve mailbox cache
885 */
886sqgetGlobalVar('mailbox_cache',$mailbox_cache,SQ_SESSION);
0b97a708 887
ce274df9 888/* end of get globals */
6201339c 889global $sqimap_capabilities, $lastTargetMailbox;
38c944cc 890
6206f6c4 891$imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0);
91c27aee 892$aMailbox = sqm_api_mailbox_select($imapConnection, $iAccount, $mailbox,array('setindex' => $what, 'offset' => $startMessage),array());
893
c3731db5 894
91c27aee 895/**
c3731db5 896 Start code to set the columns to fetch in case of hitting the next/prev link
897 The reason for this is the fact that the cache can be invalidated which means that the headers
898 to fetch aren't there anymore. Before they got calculated when the messagelist was shown.
899
900 Todo, better central handling of setting the mailbox options so we do not need to do the stuff below
901*/
902
903/**
904 * Replace From => To in case it concerns a draft or sent folder
905 */
199ff86a 906$aColumns = array();
c3731db5 907if (($mailbox == $sent_folder || $mailbox == $draft_folder) &&
908 !in_array(SQM_COL_TO,$index_order)) {
909 $aNewOrder = array(); // nice var name ;)
910 foreach($index_order as $iCol) {
911 if ($iCol == SQM_COL_FROM) {
912 $iCol = SQM_COL_TO;
913 }
199ff86a 914 $aColumns[$iCol] = array();
c3731db5 915 }
c3731db5 916} else {
199ff86a 917 foreach ($index_order as $iCol) {
918 $aColumns[$iCol] = array();
919 }
c3731db5 920}
921
922$aProps = array(
923 'columns' => $aColumns, // columns bound settings
924 'config' => array(
925 'highlight_list' => $message_highlight_list, // row highlighting rules
926 'trash_folder' => $trash_folder,
927 'sent_folder' => $sent_folder,
928 'draft_folder' => $draft_folder));
929
930calcFetchColumns($aMailbox,$aProps);
931
932/**
933 End code to set the columns to fetch in case of hitting the next/prev link
934*/
935
936
937
938/**
939 * Check if cache is still valid, $what contains the key
940 * which gives us acces to the array with uid's. At this moment
941 * 0 is used for a normal message list and search uses 1 as key. This can be
942 * changed / extended in the future.
943 * If on a select of a mailbox we detect that the cache should be invalidated due to
944 * the delete of messages or due to new messages we empty the list with uid's and
945 * that's what we detect below.
946 */
91c27aee 947if (!is_array($aMailbox['UIDSET'][$what])) {
d0b119a5 948 fetchMessageHeaders($imapConnection, $aMailbox);
91c27aee 949}
38c944cc 950
d0b119a5 951$iSetIndex = $aMailbox['SETINDEX'];
952$aMailbox['CURRENT_MSG'][$iSetIndex] = $passed_id;
953
324ac3c5 954/**
955 * Update the seen state
956 * and ignore in_array('\\seen',$aMailbox['PERMANENTFLAGS'],true)
957 */
958if (isset($aMailbox['MSG_HEADERS'][$passed_id]['FLAGS'])) {
959 $aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\seen'] = true;
e0e30169 960}
e0e30169 961
1e150c97 962/**
963 * Process Delete from delete-move-next
964 * but only if delete_id was set
965 */
966if ( sqgetGlobalVar('delete_id', $delete_id, SQ_GET) ) {
324ac3c5 967 handleMessageListForm($imapConnection,$aMailbox,$sButton='setDeleted', array($delete_id));
1e150c97 968}
969
970/**
38c944cc 971 * $message contains all information about the message
972 * including header and body
973 */
37d2a6ee 974
324ac3c5 975if (isset($aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'])) {
976 $message = $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'];
977 $FirstTimeSee = !$message->is_seen;
38c944cc 978} else {
324ac3c5 979 $message = sqimap_get_message($imapConnection, $passed_id, $mailbox);
980 $FirstTimeSee = !$message->is_seen;
981 $message->is_seen = true;
982 $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'] = $message;
5200c026 983}
dd628162 984if (isset($passed_ent_id) && $passed_ent_id) {
324ac3c5 985 $message = $message->getEntity($passed_ent_id);
986 if ($message->type0 != 'message' && $message->type1 != 'rfc822') {
987 $message = $message->parent;
988 }
989 $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY[$passed_ent_id.HEADER]", true, $response, $msg, TRUE);
990 $rfc822_header = new Rfc822Header();
991 $rfc822_header->parseHeader($read);
992 $message->rfc822_header = $rfc822_header;
91c27aee 993} else if ($message->type0 == 'message' && $message->type1 == 'rfc822' && isset($message->entities[0])) {
994 $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY[1.HEADER]", true, $response, $msg, TRUE);
995 $rfc822_header = new Rfc822Header();
996 $rfc822_header->parseHeader($read);
997 $message->rfc822_header = $rfc822_header;
c615b1da 998} else {
324ac3c5 999 $passed_ent_id = 0;
38c944cc 1000}
5200c026 1001$header = $message->header;
57257333 1002
57257333 1003
6206f6c4 1004/****************************************/
1005/* Block for handling incoming url vars */
1006/****************************************/
5200c026 1007
5200c026 1008if (isset($sendreceipt)) {
1009 if ( !$message->is_mdnsent ) {
27a1d10a 1010 $final_recipient = '';
134e4174 1011 if ((isset($identity)) && ($identity != 0)) //Main identity
27a1d10a 1012 $final_recipient = trim(getPref($data_dir, $username, 'email_address' . $identity, '' ));
1013 if ($final_recipient == '' )
1014 $final_recipient = trim(getPref($data_dir, $username, 'email_address', '' ));
324ac3c5 1015 $supportMDN = ServerMDNSupport($aMailbox["PERMANENTFLAGS"]);
fc224f68 1016 if ( SendMDN( $mailbox, $passed_id, $final_recipient, $message, $imapConnection ) > 0 && $supportMDN ) {
6201339c 1017 ToggleMDNflag( true, $imapConnection, $mailbox, $passed_id);
5200c026 1018 $message->is_mdnsent = true;
1012f961 1019 $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'] = $message;
5200c026 1020 }
5200c026 1021 }
1022}
6206f6c4 1023/***********************************************/
1024/* End of block for handling incoming url vars */
1025/***********************************************/
1026
9f42bfc8 1027$messagebody = '';
c4ad259b 1028do_hook('read_body_top');
1029if ($show_html_default == 1) {
1030 $ent_ar = $message->findDisplayEntity(array());
1031} else {
1032 $ent_ar = $message->findDisplayEntity(array(), array('text/plain'));
1033}
a128c967 1034$cnt = count($ent_ar);
1035for ($i = 0; $i < $cnt; $i++) {
6a108031 1036 $messagebody .= formatBody($imapConnection, $message, $color, $wrap_at, $ent_ar[$i], $passed_id, $mailbox);
a128c967 1037 if ($i != $cnt-1) {
83ae18bc 1038 $messagebody .= '<hr style="height: 1px;" />';
a128c967 1039 }
38c944cc 1040}
e55c441a 1041
202bcbcc 1042/**
1043 * Write mailbox with updated seen flag information back to cache.
1044 */
1045$mailbox_cache[$iAccount.'_'.$aMailbox['NAME']] = $aMailbox;
1046sqsession_register($mailbox_cache,'mailbox_cache');
1047$_SESSION['mailbox_cache'] = $mailbox_cache;
1048$oTemplate->display('footer.tpl');
1049
b89ceca6 1050displayPageHeader($color, $mailbox,'','');
324ac3c5 1051formatMenuBar($aMailbox, $passed_id, $passed_ent_id, $message,false);
e0e30169 1052formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message, $color, $FirstTimeSee);
a94c1db1 1053echo '<table width="100%" cellpadding="0" cellspacing="0" align="center" border="0">';
6206f6c4 1054echo ' <tr><td>';
a94c1db1 1055echo ' <table width="100%" cellpadding="1" cellspacing="0" align="center" border="0" bgcolor="'.$color[9].'">';
a128c967 1056echo ' <tr><td>';
a94c1db1 1057echo ' <table width="100%" cellpadding="3" cellspacing="0" align="center" border="0">';
6206f6c4 1058echo ' <tr bgcolor="'.$color[4].'"><td>';
98fb28fd 1059// echo ' <table cellpadding="1" cellspacing="5" align="left" border="0">';
605ce385 1060echo html_tag( 'table' ,'' , 'left', '', 'width="100%" cellpadding="1" cellspacing="5" border="0"' );
3c621ba1 1061echo ' <tr>' . html_tag( 'td', '<br />'. $messagebody."\n", 'left')
6c7b5d8c 1062 . '</tr>';
6206f6c4 1063echo ' </table>';
4669e892 1064echo ' </td></tr>';
6206f6c4 1065echo ' </table></td></tr>';
2ffa3f57 1066echo ' </table>';
1067echo ' </td></tr>';
a128c967 1068
3c621ba1 1069echo '<tr><td height="5" colspan="2" bgcolor="'.
1070 $color[4].'"></td></tr>'."\n";
d0a2476a 1071
a128c967 1072$attachmentsdisplay = formatAttachments($message,$ent_ar,$mailbox, $passed_id);
1073if ($attachmentsdisplay) {
8acd2fb5 1074 echo ' </table>';
6206f6c4 1075 echo ' <table width="100%" cellpadding="1" cellspacing="0" align="center"'.' border="0" bgcolor="'.$color[9].'">';
2ffa3f57 1076 echo ' <tr><td>';
d0a2476a 1077 echo ' <table width="100%" cellpadding="0" cellspacing="0" align="center" border="0" bgcolor="'.$color[4].'">';
4669e892 1078 echo ' <tr>' . html_tag( 'td', '', 'left', $color[9] );
6206f6c4 1079 echo ' <b>' . _("Attachments") . ':</b>';
1080 echo ' </td></tr>';
1081 echo ' <tr><td>';
1082 echo ' <table width="100%" cellpadding="2" cellspacing="2" align="center"'.' border="0" bgcolor="'.$color[0].'"><tr><td>';
1083 echo $attachmentsdisplay;
1084 echo ' </td></tr></table>';
6c7b5d8c 1085 echo ' </td></tr></table>';
6206f6c4 1086 echo ' </td></tr>';
3c621ba1 1087 echo '<tr><td height="5" colspan="2" bgcolor="'.
1088 $color[4].'"></td></tr>';
a128c967 1089}
c615b1da 1090echo '</table>';
a07cd1a4 1091
1092/* show attached images inline -- if pref'fed so */
5be9f195 1093if (($attachment_common_show_images) &&
a07cd1a4 1094 is_array($attachment_common_show_images_list)) {
1095 foreach ($attachment_common_show_images_list as $img) {
ce274df9 1096 $imgurl = SM_PATH . 'src/download.php' .
57257333 1097 '?' .
cd7b8833 1098 'passed_id=' . urlencode($img['passed_id']) .
3d570ba0 1099 '&amp;mailbox=' . urlencode($mailbox) .
ff9d4297 1100 '&amp;ent_id=' . urlencode($img['ent_id']) .
3d570ba0 1101 '&amp;absolute_dl=true';
5be9f195 1102
b5058e9e 1103 echo html_tag( 'table', "\n" .
d9c1dccc 1104 html_tag( 'tr', "\n" .
3c621ba1 1105 html_tag( 'td', '<img src="' . $imgurl . '" />' ."\n", 'left'
d9c1dccc 1106 )
1107 ) ,
3c621ba1 1108 'center', '', 'cellspacing="0" border="0" cellpadding="2"');
10f0ce72 1109 }
a07cd1a4 1110}
1111
324ac3c5 1112formatMenuBar($aMailbox, $passed_id, $passed_ent_id, $message, false, FALSE);
1e150c97 1113
c615b1da 1114do_hook('read_body_bottom');
a07cd1a4 1115sqimap_logout($imapConnection);
91c27aee 1116
7277191e 1117?>