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