Provide View Unsafe Images link on viewing a text/html attachment.
[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');
f3dc9c62 297 global $sendmail_path, $sendmail_args;
298 // Check for outdated configuration
299 if (!isset($sendmail_args)) {
300 if ($sendmail_path=='/var/qmail/bin/qmail-inject') {
301 $sendmail_args = '';
302 } else {
303 $sendmail_args = '-i -t';
304 }
305 }
306 $deliver = new Deliver_SendMail(array('sendmail_args'=>$sendmail_args));
d9c1dccc 307 $stream = $deliver->initStream($composeMessage,$sendmail_path);
fc224f68 308 } else {
d9c1dccc 309 require_once(SM_PATH . 'class/deliver/Deliver_SMTP.class.php');
310 $deliver = new Deliver_SMTP();
ce68b76b 311 global $smtpServerAddress, $smtpPort, $pop_before_smtp;
d9c1dccc 312 $authPop = (isset($pop_before_smtp) && $pop_before_smtp) ? true : false;
9bd3b1e6 313 get_smtp_user($user, $pass);
d9c1dccc 314 $stream = $deliver->initStream($composeMessage,$domain,0,
70ce2218 315 $smtpServerAddress, $smtpPort, $user, $pass, $authPop);
d9c1dccc 316 }
317 $success = false;
fc224f68 318 if ($stream) {
d9c1dccc 319 $length = $deliver->mail($composeMessage, $stream);
320 $success = $deliver->finalizeStream($stream);
fc224f68 321 }
d9c1dccc 322 if (!$success) {
a15f9d93 323 $msg = $deliver->dlv_msg;
324 if (! empty($deliver->dlv_server_msg)) {
325 $msg.= '<br />' .
0cc4fb0d 326 _("Server replied:") . ' ' . $deliver->dlv_ret_nr . ' ' .
a15f9d93 327 nl2br(htmlspecialchars($deliver->dlv_server_msg));
328 }
fc224f68 329 plain_error_message($msg, $color);
330 } else {
331 unset ($deliver);
d9c1dccc 332 if (sqimap_mailbox_exists ($imapConnection, $sent_folder)) {
81de00c0 333 $sid = sqimap_append ($imapConnection, $sent_folder, $length);
d9c1dccc 334 require_once(SM_PATH . 'class/deliver/Deliver_IMAP.class.php');
335 $imap_deliver = new Deliver_IMAP();
336 $imap_deliver->mail($composeMessage, $imapConnection);
81de00c0 337 sqimap_append_done ($imapConnection, $sent_folder);
d9c1dccc 338 unset ($imap_deliver);
339 }
340 }
341 return $success;
57257333 342}
343
6201339c 344function ToggleMDNflag ($set ,$imapConnection, $mailbox, $passed_id) {
d9c1dccc 345 $sg = $set?'+':'-';
346 $cmd = 'STORE ' . $passed_id . ' ' . $sg . 'FLAGS ($MDNSent)';
4669e892 347 $read = sqimap_run_command ($imapConnection, $cmd, true, $response,
6201339c 348 $readmessage, TRUE);
57257333 349}
350
4d0cd98b 351function formatRecipientString($recipients, $item ) {
d9c1dccc 352 global $show_more_cc, $show_more, $show_more_bcc,
353 $PHP_SELF;
4d0cd98b 354
d9c1dccc 355 $string = '';
38c944cc 356 if ((is_array($recipients)) && (isset($recipients[0]))) {
d9c1dccc 357 $show = false;
38c944cc 358
359 if ($item == 'to') {
d9c1dccc 360 if ($show_more) {
361 $show = true;
362 $url = set_url_var($PHP_SELF, 'show_more',0);
363 } else {
364 $url = set_url_var($PHP_SELF, 'show_more',1);
365 }
366 } else if ($item == 'cc') {
367 if ($show_more_cc) {
368 $show = true;
369 $url = set_url_var($PHP_SELF, 'show_more_cc',0);
370 } else {
371 $url = set_url_var($PHP_SELF, 'show_more_cc',1);
372 }
373 } else if ($item == 'bcc') {
374 if ($show_more_bcc) {
375 $show = true;
376 $url = set_url_var($PHP_SELF, 'show_more_bcc',0);
377 } else {
378 $url = set_url_var($PHP_SELF, 'show_more_bcc',1);
379 }
380 }
381
382 $cnt = count($recipients);
383 foreach($recipients as $r) {
a91189d6 384 $add = decodeHeader($r->getAddress(true));
d9c1dccc 385 if ($string) {
3c621ba1 386 $string .= '<br />' . $add;
d9c1dccc 387 } else {
388 $string = $add;
389 if ($cnt > 1) {
3c621ba1 390 $string .= '&nbsp;(<a href="'.$url;
d9c1dccc 391 if ($show) {
3c621ba1 392 $string .= '">'._("less").'</a>)';
d9c1dccc 393 } else {
3c621ba1 394 $string .= '">'._("more").'</a>)';
d9c1dccc 395 break;
396 }
397 }
398 }
1fca12b5 399 }
4d0cd98b 400 }
c615b1da 401 return $string;
402}
403
e0e30169 404function formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message,
af568a82 405 $color, $FirstTimeSee) {
ce68b76b 406 global $default_use_mdn, $default_use_priority,
77836429 407 $show_xmailer_default, $mdn_user_support, $PHP_SELF, $javascript_on,
134e4174 408 $squirrelmail_language;
38bca81c 409
134e4174 410 $mailbox = $aMailbox['NAME'];
e0e30169 411
d9c1dccc 412 $header = $message->rfc822_header;
413 $env = array();
bdb9ce72 414 $env[_("Subject")] = str_replace("&nbsp;"," ",decodeHeader($header->subject));
7893c8a5 415
d9c1dccc 416 $from_name = $header->getAddr_s('from');
d6b6d221 417 if (!$from_name)
d9c1dccc 418 $from_name = $header->getAddr_s('sender');
d6b6d221 419 if (!$from_name)
420 $env[_("From")] = _("Unknown sender");
421 else
422 $env[_("From")] = decodeHeader($from_name);
d9c1dccc 423 $env[_("Date")] = getLongDateString($header->date);
424 $env[_("To")] = formatRecipientString($header->to, "to");
425 $env[_("Cc")] = formatRecipientString($header->cc, "cc");
426 $env[_("Bcc")] = formatRecipientString($header->bcc, "bcc");
427 if ($default_use_priority) {
0e8006dc 428 $env[_("Priority")] = htmlspecialchars(getPriorityStr($header->priority));
d9c1dccc 429 }
430 if ($show_xmailer_default) {
a91189d6 431 $env[_("Mailer")] = decodeHeader($header->xmailer);
d9c1dccc 432 }
433 if ($default_use_mdn) {
434 if ($mdn_user_support) {
435 if ($header->dnt) {
436 if ($message->is_mdnsent) {
509ce88e 437 $env[_("Read receipt")] = _("sent");
d9c1dccc 438 } else {
4669e892 439 $env[_("Read receipt")] = _("requested");
440 if (!(handleAsSent($mailbox) ||
d9c1dccc 441 $message->is_deleted ||
442 $passed_ent_id)) {
bfb55134 443 $mdn_url = $PHP_SELF;
444 $mdn_url = set_url_var($PHP_SELF, 'mailbox', urlencode($mailbox));
445 $mdn_url = set_url_var($PHP_SELF, 'passed_id', $passed_id);
446 $mdn_url = set_url_var($PHP_SELF, 'passed_ent_id', $passed_ent_id);
447 $mdn_url = set_url_var($PHP_SELF, 'sendreceipt', 1);
d9c1dccc 448 if ($FirstTimeSee && $javascript_on) {
2c92ea9d 449 $script = '<script type="text/javascript">' . "\n";
d9c1dccc 450 $script .= '<!--'. "\n";
451 $script .= 'if(window.confirm("' .
452 _("The message sender has requested a response to indicate that you have read this message. Would you like to send a receipt?") .
453 '")) { '."\n" .
454 ' sendMDN()'.
455 '}' . "\n";
456 $script .= '// -->'. "\n";
457 $script .= '</script>'. "\n";
458 echo $script;
459 }
460 $env[_("Read receipt")] .= '&nbsp;<a href="' . $mdn_url . '">[' .
461 _("Send read receipt now") . ']</a>';
462 }
463 }
464 }
465 }
466 }
c615b1da 467
3c621ba1 468 $s = '<table width="100%" cellpadding="0" cellspacing="2" border="0"';
469 $s .= ' align="center" bgcolor="'.$color[0].'">';
d9c1dccc 470 foreach ($env as $key => $val) {
471 if ($val) {
3c621ba1 472 $s .= '<tr>';
473 $s .= html_tag('td', '<b>' . $key . ':&nbsp;&nbsp;</b>', 'right', '', 'valign="top" width="20%"') . "\n";
474 $s .= html_tag('td', $val, 'left', '', 'valign="top" width="80%"') . "\n";
475 $s .= '</tr>';
d9c1dccc 476 }
477 }
3c621ba1 478 echo '<table bgcolor="'.$color[9].'" width="100%" cellpadding="1"'.
479 ' cellspacing="0" border="0" align="center">'."\n";
480 echo '<tr><td height="5" colspan="2" bgcolor="'.
481 $color[4].'"></td></tr><tr><td align="center">'."\n";
d9c1dccc 482 echo $s;
00ac2f42 483 do_hook('read_body_header');
d9c1dccc 484 formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color);
3c621ba1 485 echo '</table>';
486 echo '</td></tr><tr><td height="5" colspan="2" bgcolor="'.$color[4].'"></td></tr>'."\n";
487 echo '</table>';
d9c1dccc 488}
c615b1da 489
1e150c97 490/**
4669e892 491 * Format message toolbar
492 *
1e150c97 493 * @param string $mailbox Name of current mailbox
494 * @param int $passed_id UID of current message
495 * @param int $passed_ent_id Id of entity within message
496 * @param object $message Current message object
497 * @param object $mbx_response
498 */
324ac3c5 499function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removedVar, $nav_on_top = TRUE) {
a94c1db1 500 global $base_uri, $draft_folder, $where, $what, $color, $sort,
4669e892 501 $startMessage, $PHP_SELF, $save_as_draft,
1e150c97 502 $enable_forward_as_attachment, $imapConnection, $lastTargetMailbox,
24bb7e49 503 $username, $delete_prev_next_display, $show_copy_buttons,
91c27aee 504 $compose_new_win, $javascript_on, $compose_width, $compose_height;
c615b1da 505
e0e30169 506 //FIXME cleanup argument list, use $aMailbox where possible
507 $mailbox = $aMailbox['NAME'];
508
d9c1dccc 509 $topbar_delimiter = '&nbsp;|&nbsp;';
1e150c97 510 $double_delimiter = '&nbsp;&nbsp;&nbsp;&nbsp;';
d9c1dccc 511 $urlMailbox = urlencode($mailbox);
c615b1da 512
1e150c97 513 $msgs_url = $base_uri . 'src/';
2ffa3f57 514
1e150c97 515 // BEGIN NAV ROW - PREV/NEXT, DEL PREV/NEXT, LINKS TO INDEX, etc.
45c1ed84 516 $nav_row = '<tr><td align="left" colspan="2" style="border: 1px solid '.$color[9].';"><small>';
e55c441a 517
1e150c97 518 // Create Prev & Next links
519 // Handle nested entities first (i.e. Mime Attach parts)
520 if (isset($passed_ent_id) && $passed_ent_id) {
521 // code for navigating through attached message/rfc822 messages
d9c1dccc 522 $url = set_url_var($PHP_SELF, 'passed_ent_id',0);
70bdc740 523 $entities = array();
524 $entity_count = array();
525 $c = 0;
f2f03410 526
70bdc740 527 foreach($message->parent->entities as $ent) {
9f42bfc8 528 if ($ent->type0 == 'message' && $ent->type1 == 'rfc822') {
529 $c++;
530 $entity_count[$c] = $ent->entity_id;
531 $entities[$ent->entity_id] = $c;
532 }
70bdc740 533 }
1e150c97 534
70bdc740 535 $prev_link = _("Previous");
91c27aee 536 if(isset($entities[$passed_ent_id]) && $entities[$passed_ent_id] > 1) {
70bdc740 537 $prev_ent_id = $entity_count[$entities[$passed_ent_id] - 1];
538 $prev_link = '<a href="'
539 . set_url_var($PHP_SELF, 'passed_ent_id', $prev_ent_id)
540 . '">' . $prev_link . '</a>';
541 }
1e150c97 542
543 $next_link = _("Next");
91c27aee 544 if(isset($entities[$passed_ent_id]) && $entities[$passed_ent_id] < $c) {
70bdc740 545 $next_ent_id = $entity_count[$entities[$passed_ent_id] + 1];
546 $next_link = '<a href="'
547 . set_url_var($PHP_SELF, 'passed_ent_id', $next_ent_id)
548 . '">' . $next_link . '</a>';
549 }
1e150c97 550
d9c1dccc 551 $par_ent_id = $message->parent->entity_id;
1e150c97 552 $up_link = '';
d9c1dccc 553 if ($par_ent_id) {
554 $par_ent_id = substr($par_ent_id,0,-2);
1e150c97 555 if ( $par_ent_id != 0 ) {
556 $up_link = $topbar_delimiter;
557 $url = set_url_var($PHP_SELF, 'passed_ent_id',$par_ent_id);
558 $up_link .= '<a href="'.$url.'">'._("Up").'</a>';
559 }
560 }
561
562 $nav_row .= $prev_link . $up_link . $topbar_delimiter . $next_link;
abafb676 563 $nav_row .= $double_delimiter . '[<a href="'.$url.'">'._("View Message").'</a>]';
1e150c97 564
565 // Prev/Next links for regular messages
324ac3c5 566 } else if ( true ) { //!(isset($where) && isset($what)) ) {
324ac3c5 567 $prev = findPreviousMessage($aMailbox['UIDSET'][$what], $passed_id);
568 $next = findNextMessage($aMailbox['UIDSET'][$what],$passed_id);
1e150c97 569
570 $prev_link = _("Previous");
571 if ($prev >= 0) {
572 $uri = $base_uri . 'src/read_body.php?passed_id='.$prev.
573 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
324ac3c5 574 "&amp;where=$where&amp;what=$what" .
1e150c97 575 '&amp;startMessage='.$startMessage.'&amp;show_more=0';
576 $prev_link = '<a href="'.$uri.'">'.$prev_link.'</a>';
d9c1dccc 577 }
1e150c97 578
579 $next_link = _("Next");
580 if ($next >= 0) {
581 $uri = $base_uri . 'src/read_body.php?passed_id='.$next.
582 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
324ac3c5 583 "&amp;where=$where&amp;what=$what" .
1e150c97 584 '&amp;startMessage='.$startMessage.'&amp;show_more=0';
585 $next_link = '<a href="'.$uri.'">'.$next_link.'</a>';
586 }
587
1e150c97 588 // Only bother with Delete & Prev and Delete & Next IF
6201339c 589 // top display is enabled.
4669e892 590 if ( $delete_prev_next_display == 1 &&
324ac3c5 591 in_array('\\deleted', $aMailbox['PERMANENTFLAGS'],true) ) {
407e7032 592 $del_prev_link = _("Delete &amp; Prev");
1e150c97 593 if ($prev >= 0) {
594 $uri = $base_uri . 'src/read_body.php?passed_id='.$prev.
595 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
596 '&amp;startMessage='.$startMessage.'&amp;show_more=0'.
324ac3c5 597 "&amp;where=$where&amp;what=$what" .
1e150c97 598 '&amp;delete_id='.$passed_id;
4669e892 599 $del_prev_link = '<a href="'.$uri.'">'.$del_prev_link.'</a>';
1e150c97 600 }
601
407e7032 602 $del_next_link = _("Delete &amp; Next");
1e150c97 603 if ($next >= 0) {
604 $uri = $base_uri . 'src/read_body.php?passed_id='.$next.
605 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
606 '&amp;startMessage='.$startMessage.'&amp;show_more=0'.
324ac3c5 607 "&amp;where=$where&amp;what=$what" .
1e150c97 608 '&amp;delete_id='.$passed_id;
45c1ed84 609 $del_next_link = '<a href="'.$uri.'">'.$del_next_link.'</a>';
1e150c97 610 }
1e150c97 611 }
45c1ed84 612
abafb676 613 $nav_row .= '['.$prev_link.$topbar_delimiter.$next_link.']';
614 if ( isset($del_prev_link) && isset($del_next_link) )
615 $nav_row .= $double_delimiter.'['.$del_prev_link.$topbar_delimiter.$del_next_link.']';
1e150c97 616 }
617
618 // Start with Search Results or Message List link.
324ac3c5 619 $msgs_url .= "$where?where=read_body.php&amp;what=$what&amp;mailbox=" . $urlMailbox.
620 "&amp;startMessage=$startMessage";
621 if ($where == 'search.php') {
1e150c97 622 $msgs_str = _("Search Results");
623 } else {
1e150c97 624 $msgs_str = _("Message List");
625 }
626 $nav_row .= $double_delimiter .
abafb676 627 '[<a href="' . $msgs_url . '">' . $msgs_str . '</a>]';
1e150c97 628
629 $nav_row .= '</small></td></tr>';
630
631
632 // BEGIN MENU ROW - DELETE/REPLY/FORWARD/MOVE/etc.
ad2ee09d 633 $menu_row = '<tr bgcolor="'.$color[0].'"><td><small>';
98a9cc03 634 $comp_uri = $base_uri.'src/compose.php' .
635 '?passed_id=' . $passed_id .
636 '&amp;mailbox=' . $urlMailbox .
637 '&amp;startMessage=' . $startMessage .
638 (isset($passed_ent_id) ? '&amp;passed_ent_id='.$passed_ent_id : '');
4669e892 639
640 // Start form for reply/reply all/forward..
1a531551 641 $target = '';
642 $on_click='';
ee66175d 643 $method='method="post" ';
6190378c 644 $onsubmit='';
1a531551 645 if ($compose_new_win == '1') {
91c27aee 646 if (!preg_match("/^[0-9]{3,4}$/", $compose_width)) {
647 $compose_width = '640';
648 }
649 if (!preg_match("/^[0-9]{3,4}$/", $compose_height)) {
650 $compose_height = '550';
651 }
1a531551 652 if ( $javascript_on ) {
91c27aee 653 $on_click=' onclick="comp_in_new_form(\''.$comp_uri.'\', this, this.form,'. $compose_width .',' . $compose_height .')"';
1a531551 654 $comp_uri = 'javascript:void(0)';
ee66175d 655 $method='method="get" ';
6190378c 656 $onsubmit = 'onsubmit="return false" ';
1a531551 657 } else {
658 $target = 'target="_blank"';
1a531551 659 }
660 }
661
6190378c 662 $menu_row .= "\n".'<form name="composeForm" action="'.$comp_uri.'" '
663 . $method.$target.$onsubmit.' style="display: inline">'."\n";
98a9cc03 664
1e150c97 665 // If Draft folder - create Resume link
666 if (($mailbox == $draft_folder) && ($save_as_draft)) {
1a531551 667 $new_button = 'smaction_draft';
1e150c97 668 $comp_alt_string = _("Resume Draft");
669 } else if (handleAsSent($mailbox)) {
670 // If in Sent folder, edit as new
1a531551 671 $new_button = 'smaction_edit_new';
1e150c97 672 $comp_alt_string = _("Edit Message as New");
673 }
1e150c97 674 // Show Alt URI for Draft/Sent
98a9cc03 675 if (isset($comp_alt_string))
e1728a7a 676 $menu_row .= getButton('submit', $new_button, $comp_alt_string, $on_click) . "\n";
1e150c97 677
e1728a7a 678 $menu_row .= getButton('submit', 'smaction_reply', _("Reply"), $on_click) . "\n";
679 $menu_row .= getButton('submit', 'smaction_reply_all', _("Reply All"), $on_click) ."\n";
680 $menu_row .= getButton('submit', 'smaction_forward', _("Forward"), $on_click);
98a9cc03 681 if ($enable_forward_as_attachment)
ff0969a0 682 $menu_row .= '<input type="checkbox" name="smaction_attache" />' . _("As Attachment") .'&nbsp;&nbsp;'."\n";
1e150c97 683
51eb014b 684 $menu_row .= '</form>&nbsp;';
c615b1da 685
324ac3c5 686 if ( in_array('\\deleted', $aMailbox['PERMANENTFLAGS'],true) ) {
687 // Form for deletion. Form is handled by the originating display in $where. This is right_main.php or search.php
688 $delete_url = $base_uri . "src/$where";
25e57ed2 689 $menu_row .= '<form name="deleteMessageForm" action="'.$delete_url.'" method="post" style="display: inline">';
a128c967 690
4669e892 691 if (!(isset($passed_ent_id) && $passed_ent_id)) {
324ac3c5 692 $menu_row .= addHidden('mailbox', $aMailbox['NAME']);
693 $menu_row .= addHidden('msg[0]', $passed_id);
7fcab811 694 $menu_row .= addHidden('startMessage', $startMessage);
e1728a7a 695 $menu_row .= getButton('submit', 'delete', _("Delete"));
ff0969a0 696 $menu_row .= '<input type="checkbox" name="bypass_trash" />' . _("Bypass Trash");
324ac3c5 697 } else {
e1728a7a 698 $menu_row .= getButton('submit', 'delete', _("Delete"), '', FALSE) . "\n"; // delete button is disabled
abafb676 699 }
abafb676 700
4669e892 701 $menu_row .= '</form>';
702 }
abafb676 703
1e150c97 704 // Add top move link
705 $menu_row .= '</small></td><td align="right">';
4669e892 706 if ( !(isset($passed_ent_id) && $passed_ent_id) &&
324ac3c5 707 in_array('\\deleted', $aMailbox['PERMANENTFLAGS'],true) ) {
b2811304 708
25e57ed2 709 $menu_row .= '<form name="moveMessageForm" action="'.$base_uri.'src/'.$where.'?'.'" method="post" style="display: inline">'.
64c9e87e 710 '<small>'.
324ac3c5 711
712 addHidden('mailbox',$aMailbox['NAME']) .
713 addHidden('msg[0]', $passed_id) . _("Move to:") .
1e150c97 714 '<select name="targetMailbox" style="padding: 0px; margin: 0px">';
b2811304 715
1e150c97 716 if (isset($lastTargetMailbox) && !empty($lastTargetMailbox)) {
717 $menu_row .= sqimap_mailbox_option_list($imapConnection, array(strtolower($lastTargetMailbox)));
718 } else {
719 $menu_row .= sqimap_mailbox_option_list($imapConnection);
720 }
b2811304 721 $menu_row .= '</select> ';
722
24bb7e49 723 $menu_row .= getButton('submit', 'moveButton',_("Move")) . "\n";
724
725 // Add msg copy button
726 if ($show_copy_buttons) {
727 $menu_row .= getButton('submit', 'copyButton', _("Copy"));
728 }
729
730 $menu_row .= '</form>';
1e150c97 731 }
732 $menu_row .= '</td></tr>';
d9c1dccc 733
1e150c97 734 // echo rows, with hooks
764971df 735 $ret = do_hook_function('read_body_menu_top', array($nav_row, $menu_row));
988e24f6 736 if (is_array($ret)) {
737 if (isset($ret[0]) && !empty($ret[0])) {
738 $nav_row = $ret[0];
739 }
740 if (isset($ret[1]) && !empty($ret[1])) {
741 $menu_row = $ret[1];
742 }
764971df 743 }
1e150c97 744 echo '<table width="100%" cellpadding="3" cellspacing="0" align="center" border="0">';
745 echo $nav_on_top ? $nav_row . $menu_row : $menu_row . $nav_row;
746 echo '</table>'."\n";
d62c4938 747 do_hook('read_body_menu_bottom');
c615b1da 748}
749
750function formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color) {
40a34e57 751 global $base_uri, $where, $what, $download_and_unsafe_link;
4669e892 752
d9c1dccc 753 $urlMailbox = urlencode($mailbox);
78909469 754 $urlPassed_id = urlencode($passed_id);
755 $urlPassed_ent_id = urlencode($passed_ent_id);
4669e892 756
78909469 757 $query_string = 'mailbox=' . $urlMailbox . '&amp;passed_id=' . $urlPassed_id . '&amp;passed_ent_id=' . $urlPassed_ent_id;
4669e892 758
78909469 759 if (!empty($where)) {
760 $query_string .= '&amp;where=' . urlencode($where);
761 }
762
763 if (!empty($what)) {
764 $query_string .= '&amp;what=' . urlencode($what);
765 }
766
e95c04ec 767 $url = $base_uri.'src/view_header.php?'.$query_string;
d9c1dccc 768
3c621ba1 769 $s = "<tr>\n" .
770 html_tag( 'td', '', 'right', '', 'valign="middle" width="20%"' ) . '<b>' . _("Options") . ":&nbsp;&nbsp;</b></td>\n" .
771 html_tag( 'td', '', 'left', '', 'valign="middle" width="80%"' ) . '<small>' .
d9c1dccc 772 '<a href="'.$url.'">'._("View Full Header").'</a>';
773
774 /* Output the printer friendly link if we are in subtle mode. */
775 $s .= '&nbsp;|&nbsp;' .
1e150c97 776 printer_friendly_link($mailbox, $passed_id, $passed_ent_id);
d9c1dccc 777 echo $s;
7277191e 778 echo view_as_html_link($mailbox, $passed_id, $passed_ent_id, $message);
40a34e57 779
780 /* Output the download and/or unsafe images link/-s, if any. */
781 if ($download_and_unsafe_link) {
f3dc9c62 782 echo $download_and_unsafe_link;
40a34e57 783 }
784
d9c1dccc 785 do_hook("read_body_header_right");
3c621ba1 786 $s = "</small></td>\n" .
787 "</tr>\n";
d9c1dccc 788 echo $s;
a128c967 789
4d0cd98b 790}
791
91c27aee 792/**
793 * Creates button
794 *
795 * @deprecated see form functions available in 1.5.1 and 1.4.3.
796 * @param string $type
797 * @param string $name
798 * @param string $value
799 * @param string $js
800 * @param bool $enabled
801 */
802function getButton($type, $name, $value, $js = '', $enabled = TRUE) {
803 $disabled = ( $enabled ? '' : 'disabled ' );
804 $js = ( $js ? $js.' ' : '' );
805 return '<input '.$disabled.$js.
806 'type="'.$type.
807 '" name="'.$name.
808 '" value="'.$value .
809 '" style="padding: 0px; margin: 0px" />';
810}
811
812
6206f6c4 813/***************************/
2ffa3f57 814/* Main of read_body.php */
6206f6c4 815/***************************/
57257333 816
0b97a708 817/* get the globals we may need */
818
e95c04ec 819sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION);
e95c04ec 820sqgetGlobalVar('lastTargetMailbox', $lastTargetMailbox, SQ_SESSION);
e95c04ec 821if (!sqgetGlobalVar('messages', $messages, SQ_SESSION) ) {
822 $messages = array();
ce274df9 823}
81de00c0 824sqgetGlobalVar('delayed_errors', $delayed_errors, SQ_SESSION);
825if (is_array($delayed_errors)) {
826 $oErrorHandler->AssignDelayedErrors($delayed_errors);
827 sqsession_unregister("delayed_errors");
828}
e95c04ec 829/** GET VARS */
830sqgetGlobalVar('sendreceipt', $sendreceipt, SQ_GET);
324ac3c5 831if (!sqgetGlobalVar('where', $where, SQ_GET) ) {
832 $where = 'right_main.php';
833}
d0b119a5 834/*
835 * Used as entry key to the list of uid's cached in the mailbox cache
836 * we use the cached uid's to get the next and prev message.
837 */
324ac3c5 838if (!sqgetGlobalVar('what', $what, SQ_GET) ){
839 $what = 0;
840}
e95c04ec 841if ( sqgetGlobalVar('show_more', $temp, SQ_GET) ) {
842 $show_more = (int) $temp;
1b9f3c04 843}
e95c04ec 844if ( sqgetGlobalVar('show_more_cc', $temp, SQ_GET) ) {
845 $show_more_cc = (int) $temp;
0b97a708 846}
e95c04ec 847if ( sqgetGlobalVar('show_more_bcc', $temp, SQ_GET) ) {
848 $show_more_bcc = (int) $temp;
0b97a708 849}
e95c04ec 850if ( sqgetGlobalVar('view_hdr', $temp, SQ_GET) ) {
851 $view_hdr = (int) $temp;
0b97a708 852}
e95c04ec 853
91c27aee 854if ( sqgetGlobalVar('account', $temp, SQ_GET) ) {
855 $iAccount = (int) $temp;
856} else {
857 $iAccount = 0;
858}
859
e95c04ec 860/** GET/POST VARS */
861sqgetGlobalVar('passed_ent_id', $passed_ent_id);
862sqgetGlobalVar('mailbox', $mailbox);
863
864if ( sqgetGlobalVar('passed_id', $temp) ) {
865 $passed_id = (int) $temp;
0b97a708 866}
e95c04ec 867if ( sqgetGlobalVar('sort', $temp) ) {
868 $sort = (int) $temp;
0b97a708 869}
e95c04ec 870if ( sqgetGlobalVar('startMessage', $temp) ) {
871 $startMessage = (int) $temp;
324ac3c5 872} else {
873 $startMessage = 1;
ce274df9 874}
7277191e 875if(sqgetGlobalVar('show_html_default', $temp)) {
876 $show_html_default = (int) $temp;
877}
878
879if(sqgetGlobalVar('view_unsafe_images', $temp)) {
880 $view_unsafe_images = (int) $temp;
881 if($view_unsafe_images == 1) {
882 $show_html_default = 1;
883 }
884} else {
885 $view_unsafe_images = 0;
886}
324ac3c5 887/**
888 * Retrieve mailbox cache
889 */
890sqgetGlobalVar('mailbox_cache',$mailbox_cache,SQ_SESSION);
0b97a708 891
ce274df9 892/* end of get globals */
6201339c 893global $sqimap_capabilities, $lastTargetMailbox;
38c944cc 894
906f7e9f 895$imapConnection = sqimap_login($username, false, $imapServerAddress, $imapPort, 0);
91c27aee 896$aMailbox = sqm_api_mailbox_select($imapConnection, $iAccount, $mailbox,array('setindex' => $what, 'offset' => $startMessage),array());
897
c3731db5 898
91c27aee 899/**
c3731db5 900 Start code to set the columns to fetch in case of hitting the next/prev link
901 The reason for this is the fact that the cache can be invalidated which means that the headers
902 to fetch aren't there anymore. Before they got calculated when the messagelist was shown.
903
904 Todo, better central handling of setting the mailbox options so we do not need to do the stuff below
905*/
906
907/**
908 * Replace From => To in case it concerns a draft or sent folder
909 */
199ff86a 910$aColumns = array();
c3731db5 911if (($mailbox == $sent_folder || $mailbox == $draft_folder) &&
912 !in_array(SQM_COL_TO,$index_order)) {
913 $aNewOrder = array(); // nice var name ;)
914 foreach($index_order as $iCol) {
915 if ($iCol == SQM_COL_FROM) {
916 $iCol = SQM_COL_TO;
917 }
199ff86a 918 $aColumns[$iCol] = array();
c3731db5 919 }
c3731db5 920} else {
199ff86a 921 foreach ($index_order as $iCol) {
922 $aColumns[$iCol] = array();
923 }
c3731db5 924}
925
926$aProps = array(
927 'columns' => $aColumns, // columns bound settings
928 'config' => array(
929 'highlight_list' => $message_highlight_list, // row highlighting rules
930 'trash_folder' => $trash_folder,
931 'sent_folder' => $sent_folder,
932 'draft_folder' => $draft_folder));
933
934calcFetchColumns($aMailbox,$aProps);
935
936/**
937 End code to set the columns to fetch in case of hitting the next/prev link
938*/
939
940
941
942/**
943 * Check if cache is still valid, $what contains the key
944 * which gives us acces to the array with uid's. At this moment
945 * 0 is used for a normal message list and search uses 1 as key. This can be
946 * changed / extended in the future.
947 * If on a select of a mailbox we detect that the cache should be invalidated due to
948 * the delete of messages or due to new messages we empty the list with uid's and
949 * that's what we detect below.
950 */
91c27aee 951if (!is_array($aMailbox['UIDSET'][$what])) {
d0b119a5 952 fetchMessageHeaders($imapConnection, $aMailbox);
91c27aee 953}
38c944cc 954
d0b119a5 955$iSetIndex = $aMailbox['SETINDEX'];
956$aMailbox['CURRENT_MSG'][$iSetIndex] = $passed_id;
957
324ac3c5 958/**
959 * Update the seen state
960 * and ignore in_array('\\seen',$aMailbox['PERMANENTFLAGS'],true)
961 */
962if (isset($aMailbox['MSG_HEADERS'][$passed_id]['FLAGS'])) {
963 $aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\seen'] = true;
e0e30169 964}
e0e30169 965
1e150c97 966/**
967 * Process Delete from delete-move-next
968 * but only if delete_id was set
969 */
970if ( sqgetGlobalVar('delete_id', $delete_id, SQ_GET) ) {
324ac3c5 971 handleMessageListForm($imapConnection,$aMailbox,$sButton='setDeleted', array($delete_id));
1e150c97 972}
973
38c944cc 974/**
975 * $message contains all information about the message
976 * including header and body
977 */
37d2a6ee 978
324ac3c5 979if (isset($aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'])) {
980 $message = $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'];
981 $FirstTimeSee = !$message->is_seen;
38c944cc 982} else {
324ac3c5 983 $message = sqimap_get_message($imapConnection, $passed_id, $mailbox);
984 $FirstTimeSee = !$message->is_seen;
985 $message->is_seen = true;
986 $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'] = $message;
5200c026 987}
dd628162 988if (isset($passed_ent_id) && $passed_ent_id) {
324ac3c5 989 $message = $message->getEntity($passed_ent_id);
990 if ($message->type0 != 'message' && $message->type1 != 'rfc822') {
991 $message = $message->parent;
992 }
993 $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY[$passed_ent_id.HEADER]", true, $response, $msg, TRUE);
994 $rfc822_header = new Rfc822Header();
995 $rfc822_header->parseHeader($read);
996 $message->rfc822_header = $rfc822_header;
91c27aee 997} else if ($message->type0 == 'message' && $message->type1 == 'rfc822' && isset($message->entities[0])) {
998 $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY[1.HEADER]", true, $response, $msg, TRUE);
999 $rfc822_header = new Rfc822Header();
1000 $rfc822_header->parseHeader($read);
1001 $message->rfc822_header = $rfc822_header;
c615b1da 1002} else {
324ac3c5 1003 $passed_ent_id = 0;
38c944cc 1004}
5200c026 1005$header = $message->header;
57257333 1006
57257333 1007
6206f6c4 1008/****************************************/
1009/* Block for handling incoming url vars */
1010/****************************************/
5200c026 1011
5200c026 1012if (isset($sendreceipt)) {
1013 if ( !$message->is_mdnsent ) {
27a1d10a 1014 $final_recipient = '';
134e4174 1015 if ((isset($identity)) && ($identity != 0)) //Main identity
27a1d10a 1016 $final_recipient = trim(getPref($data_dir, $username, 'email_address' . $identity, '' ));
1017 if ($final_recipient == '' )
1018 $final_recipient = trim(getPref($data_dir, $username, 'email_address', '' ));
324ac3c5 1019 $supportMDN = ServerMDNSupport($aMailbox["PERMANENTFLAGS"]);
fc224f68 1020 if ( SendMDN( $mailbox, $passed_id, $final_recipient, $message, $imapConnection ) > 0 && $supportMDN ) {
6201339c 1021 ToggleMDNflag( true, $imapConnection, $mailbox, $passed_id);
5200c026 1022 $message->is_mdnsent = true;
1012f961 1023 $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'] = $message;
5200c026 1024 }
5200c026 1025 }
1026}
6206f6c4 1027/***********************************************/
1028/* End of block for handling incoming url vars */
1029/***********************************************/
1030
9f42bfc8 1031$messagebody = '';
c4ad259b 1032do_hook('read_body_top');
1033if ($show_html_default == 1) {
1034 $ent_ar = $message->findDisplayEntity(array());
1035} else {
1036 $ent_ar = $message->findDisplayEntity(array(), array('text/plain'));
1037}
a128c967 1038$cnt = count($ent_ar);
1039for ($i = 0; $i < $cnt; $i++) {
6a108031 1040 $messagebody .= formatBody($imapConnection, $message, $color, $wrap_at, $ent_ar[$i], $passed_id, $mailbox);
a128c967 1041 if ($i != $cnt-1) {
83ae18bc 1042 $messagebody .= '<hr style="height: 1px;" />';
a128c967 1043 }
38c944cc 1044}
e55c441a 1045
202bcbcc 1046/**
1047 * Write mailbox with updated seen flag information back to cache.
1048 */
1049$mailbox_cache[$iAccount.'_'.$aMailbox['NAME']] = $aMailbox;
1050sqsession_register($mailbox_cache,'mailbox_cache');
1051$_SESSION['mailbox_cache'] = $mailbox_cache;
202bcbcc 1052
b89ceca6 1053displayPageHeader($color, $mailbox,'','');
324ac3c5 1054formatMenuBar($aMailbox, $passed_id, $passed_ent_id, $message,false);
e0e30169 1055formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message, $color, $FirstTimeSee);
a94c1db1 1056echo '<table width="100%" cellpadding="0" cellspacing="0" align="center" border="0">';
6206f6c4 1057echo ' <tr><td>';
a94c1db1 1058echo ' <table width="100%" cellpadding="1" cellspacing="0" align="center" border="0" bgcolor="'.$color[9].'">';
a128c967 1059echo ' <tr><td>';
a94c1db1 1060echo ' <table width="100%" cellpadding="3" cellspacing="0" align="center" border="0">';
6206f6c4 1061echo ' <tr bgcolor="'.$color[4].'"><td>';
98fb28fd 1062// echo ' <table cellpadding="1" cellspacing="5" align="left" border="0">';
605ce385 1063echo html_tag( 'table' ,'' , 'left', '', 'width="100%" cellpadding="1" cellspacing="5" border="0"' );
3c621ba1 1064echo ' <tr>' . html_tag( 'td', '<br />'. $messagebody."\n", 'left')
6c7b5d8c 1065 . '</tr>';
6206f6c4 1066echo ' </table>';
4669e892 1067echo ' </td></tr>';
6206f6c4 1068echo ' </table></td></tr>';
2ffa3f57 1069echo ' </table>';
1070echo ' </td></tr>';
a128c967 1071
3c621ba1 1072echo '<tr><td height="5" colspan="2" bgcolor="'.
1073 $color[4].'"></td></tr>'."\n";
d0a2476a 1074
a128c967 1075$attachmentsdisplay = formatAttachments($message,$ent_ar,$mailbox, $passed_id);
1076if ($attachmentsdisplay) {
8acd2fb5 1077 echo ' </table>';
6206f6c4 1078 echo ' <table width="100%" cellpadding="1" cellspacing="0" align="center"'.' border="0" bgcolor="'.$color[9].'">';
2ffa3f57 1079 echo ' <tr><td>';
d0a2476a 1080 echo ' <table width="100%" cellpadding="0" cellspacing="0" align="center" border="0" bgcolor="'.$color[4].'">';
4669e892 1081 echo ' <tr>' . html_tag( 'td', '', 'left', $color[9] );
6206f6c4 1082 echo ' <b>' . _("Attachments") . ':</b>';
1083 echo ' </td></tr>';
1084 echo ' <tr><td>';
1085 echo ' <table width="100%" cellpadding="2" cellspacing="2" align="center"'.' border="0" bgcolor="'.$color[0].'"><tr><td>';
1086 echo $attachmentsdisplay;
1087 echo ' </td></tr></table>';
6c7b5d8c 1088 echo ' </td></tr></table>';
6206f6c4 1089 echo ' </td></tr>';
3c621ba1 1090 echo '<tr><td height="5" colspan="2" bgcolor="'.
1091 $color[4].'"></td></tr>';
a128c967 1092}
c615b1da 1093echo '</table>';
a07cd1a4 1094
1095/* show attached images inline -- if pref'fed so */
5be9f195 1096if (($attachment_common_show_images) &&
a07cd1a4 1097 is_array($attachment_common_show_images_list)) {
1098 foreach ($attachment_common_show_images_list as $img) {
ce274df9 1099 $imgurl = SM_PATH . 'src/download.php' .
57257333 1100 '?' .
cd7b8833 1101 'passed_id=' . urlencode($img['passed_id']) .
3d570ba0 1102 '&amp;mailbox=' . urlencode($mailbox) .
ff9d4297 1103 '&amp;ent_id=' . urlencode($img['ent_id']) .
3d570ba0 1104 '&amp;absolute_dl=true';
5be9f195 1105
b5058e9e 1106 echo html_tag( 'table', "\n" .
d9c1dccc 1107 html_tag( 'tr', "\n" .
3c621ba1 1108 html_tag( 'td', '<img src="' . $imgurl . '" />' ."\n", 'left'
d9c1dccc 1109 )
1110 ) ,
3c621ba1 1111 'center', '', 'cellspacing="0" border="0" cellpadding="2"');
10f0ce72 1112 }
a07cd1a4 1113}
1114
324ac3c5 1115formatMenuBar($aMailbox, $passed_id, $passed_ent_id, $message, false, FALSE);
1e150c97 1116
c615b1da 1117do_hook('read_body_bottom');
a07cd1a4 1118sqimap_logout($imapConnection);
51d66ea2 1119$oTemplate->display('footer.tpl');
7277191e 1120?>