missing '}' in session_expired_post, thanks Rusty Nejdl
[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
1e12d1ff 819sqgetGlobalVar('key', $key, SQ_COOKIE);
e95c04ec 820sqgetGlobalVar('username', $username, SQ_SESSION);
821sqgetGlobalVar('onetimepad',$onetimepad, SQ_SESSION);
e95c04ec 822sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION);
1e12d1ff 823sqgetGlobalVar('base_uri', $base_uri, SQ_SESSION);
e95c04ec 824sqgetGlobalVar('lastTargetMailbox', $lastTargetMailbox, SQ_SESSION);
e95c04ec 825if (!sqgetGlobalVar('messages', $messages, SQ_SESSION) ) {
826 $messages = array();
ce274df9 827}
81de00c0 828sqgetGlobalVar('delayed_errors', $delayed_errors, SQ_SESSION);
829if (is_array($delayed_errors)) {
830 $oErrorHandler->AssignDelayedErrors($delayed_errors);
831 sqsession_unregister("delayed_errors");
832}
e95c04ec 833/** GET VARS */
834sqgetGlobalVar('sendreceipt', $sendreceipt, SQ_GET);
324ac3c5 835if (!sqgetGlobalVar('where', $where, SQ_GET) ) {
836 $where = 'right_main.php';
837}
d0b119a5 838/*
839 * Used as entry key to the list of uid's cached in the mailbox cache
840 * we use the cached uid's to get the next and prev message.
841 */
324ac3c5 842if (!sqgetGlobalVar('what', $what, SQ_GET) ){
843 $what = 0;
844}
e95c04ec 845if ( sqgetGlobalVar('show_more', $temp, SQ_GET) ) {
846 $show_more = (int) $temp;
1b9f3c04 847}
e95c04ec 848if ( sqgetGlobalVar('show_more_cc', $temp, SQ_GET) ) {
849 $show_more_cc = (int) $temp;
0b97a708 850}
e95c04ec 851if ( sqgetGlobalVar('show_more_bcc', $temp, SQ_GET) ) {
852 $show_more_bcc = (int) $temp;
0b97a708 853}
e95c04ec 854if ( sqgetGlobalVar('view_hdr', $temp, SQ_GET) ) {
855 $view_hdr = (int) $temp;
0b97a708 856}
e95c04ec 857
91c27aee 858if ( sqgetGlobalVar('account', $temp, SQ_GET) ) {
859 $iAccount = (int) $temp;
860} else {
861 $iAccount = 0;
862}
863
e95c04ec 864/** GET/POST VARS */
865sqgetGlobalVar('passed_ent_id', $passed_ent_id);
866sqgetGlobalVar('mailbox', $mailbox);
867
868if ( sqgetGlobalVar('passed_id', $temp) ) {
869 $passed_id = (int) $temp;
0b97a708 870}
e95c04ec 871if ( sqgetGlobalVar('sort', $temp) ) {
872 $sort = (int) $temp;
0b97a708 873}
e95c04ec 874if ( sqgetGlobalVar('startMessage', $temp) ) {
875 $startMessage = (int) $temp;
324ac3c5 876} else {
877 $startMessage = 1;
ce274df9 878}
7277191e 879if(sqgetGlobalVar('show_html_default', $temp)) {
880 $show_html_default = (int) $temp;
881}
882
883if(sqgetGlobalVar('view_unsafe_images', $temp)) {
884 $view_unsafe_images = (int) $temp;
885 if($view_unsafe_images == 1) {
886 $show_html_default = 1;
887 }
888} else {
889 $view_unsafe_images = 0;
890}
324ac3c5 891/**
892 * Retrieve mailbox cache
893 */
894sqgetGlobalVar('mailbox_cache',$mailbox_cache,SQ_SESSION);
0b97a708 895
ce274df9 896/* end of get globals */
6201339c 897global $sqimap_capabilities, $lastTargetMailbox;
38c944cc 898
6206f6c4 899$imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0);
91c27aee 900$aMailbox = sqm_api_mailbox_select($imapConnection, $iAccount, $mailbox,array('setindex' => $what, 'offset' => $startMessage),array());
901
c3731db5 902
91c27aee 903/**
c3731db5 904 Start code to set the columns to fetch in case of hitting the next/prev link
905 The reason for this is the fact that the cache can be invalidated which means that the headers
906 to fetch aren't there anymore. Before they got calculated when the messagelist was shown.
907
908 Todo, better central handling of setting the mailbox options so we do not need to do the stuff below
909*/
910
911/**
912 * Replace From => To in case it concerns a draft or sent folder
913 */
199ff86a 914$aColumns = array();
c3731db5 915if (($mailbox == $sent_folder || $mailbox == $draft_folder) &&
916 !in_array(SQM_COL_TO,$index_order)) {
917 $aNewOrder = array(); // nice var name ;)
918 foreach($index_order as $iCol) {
919 if ($iCol == SQM_COL_FROM) {
920 $iCol = SQM_COL_TO;
921 }
199ff86a 922 $aColumns[$iCol] = array();
c3731db5 923 }
c3731db5 924} else {
199ff86a 925 foreach ($index_order as $iCol) {
926 $aColumns[$iCol] = array();
927 }
c3731db5 928}
929
930$aProps = array(
931 'columns' => $aColumns, // columns bound settings
932 'config' => array(
933 'highlight_list' => $message_highlight_list, // row highlighting rules
934 'trash_folder' => $trash_folder,
935 'sent_folder' => $sent_folder,
936 'draft_folder' => $draft_folder));
937
938calcFetchColumns($aMailbox,$aProps);
939
940/**
941 End code to set the columns to fetch in case of hitting the next/prev link
942*/
943
944
945
946/**
947 * Check if cache is still valid, $what contains the key
948 * which gives us acces to the array with uid's. At this moment
949 * 0 is used for a normal message list and search uses 1 as key. This can be
950 * changed / extended in the future.
951 * If on a select of a mailbox we detect that the cache should be invalidated due to
952 * the delete of messages or due to new messages we empty the list with uid's and
953 * that's what we detect below.
954 */
91c27aee 955if (!is_array($aMailbox['UIDSET'][$what])) {
d0b119a5 956 fetchMessageHeaders($imapConnection, $aMailbox);
91c27aee 957}
38c944cc 958
d0b119a5 959$iSetIndex = $aMailbox['SETINDEX'];
960$aMailbox['CURRENT_MSG'][$iSetIndex] = $passed_id;
961
324ac3c5 962/**
963 * Update the seen state
964 * and ignore in_array('\\seen',$aMailbox['PERMANENTFLAGS'],true)
965 */
966if (isset($aMailbox['MSG_HEADERS'][$passed_id]['FLAGS'])) {
967 $aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\seen'] = true;
e0e30169 968}
e0e30169 969
1e150c97 970/**
971 * Process Delete from delete-move-next
972 * but only if delete_id was set
973 */
974if ( sqgetGlobalVar('delete_id', $delete_id, SQ_GET) ) {
324ac3c5 975 handleMessageListForm($imapConnection,$aMailbox,$sButton='setDeleted', array($delete_id));
1e150c97 976}
977
38c944cc 978/**
979 * $message contains all information about the message
980 * including header and body
981 */
37d2a6ee 982
324ac3c5 983if (isset($aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'])) {
984 $message = $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'];
985 $FirstTimeSee = !$message->is_seen;
38c944cc 986} else {
324ac3c5 987 $message = sqimap_get_message($imapConnection, $passed_id, $mailbox);
988 $FirstTimeSee = !$message->is_seen;
989 $message->is_seen = true;
990 $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'] = $message;
5200c026 991}
dd628162 992if (isset($passed_ent_id) && $passed_ent_id) {
324ac3c5 993 $message = $message->getEntity($passed_ent_id);
994 if ($message->type0 != 'message' && $message->type1 != 'rfc822') {
995 $message = $message->parent;
996 }
997 $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY[$passed_ent_id.HEADER]", true, $response, $msg, TRUE);
998 $rfc822_header = new Rfc822Header();
999 $rfc822_header->parseHeader($read);
1000 $message->rfc822_header = $rfc822_header;
91c27aee 1001} else if ($message->type0 == 'message' && $message->type1 == 'rfc822' && isset($message->entities[0])) {
1002 $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY[1.HEADER]", true, $response, $msg, TRUE);
1003 $rfc822_header = new Rfc822Header();
1004 $rfc822_header->parseHeader($read);
1005 $message->rfc822_header = $rfc822_header;
c615b1da 1006} else {
324ac3c5 1007 $passed_ent_id = 0;
38c944cc 1008}
5200c026 1009$header = $message->header;
57257333 1010
57257333 1011
6206f6c4 1012/****************************************/
1013/* Block for handling incoming url vars */
1014/****************************************/
5200c026 1015
5200c026 1016if (isset($sendreceipt)) {
1017 if ( !$message->is_mdnsent ) {
27a1d10a 1018 $final_recipient = '';
134e4174 1019 if ((isset($identity)) && ($identity != 0)) //Main identity
27a1d10a 1020 $final_recipient = trim(getPref($data_dir, $username, 'email_address' . $identity, '' ));
1021 if ($final_recipient == '' )
1022 $final_recipient = trim(getPref($data_dir, $username, 'email_address', '' ));
324ac3c5 1023 $supportMDN = ServerMDNSupport($aMailbox["PERMANENTFLAGS"]);
fc224f68 1024 if ( SendMDN( $mailbox, $passed_id, $final_recipient, $message, $imapConnection ) > 0 && $supportMDN ) {
6201339c 1025 ToggleMDNflag( true, $imapConnection, $mailbox, $passed_id);
5200c026 1026 $message->is_mdnsent = true;
1012f961 1027 $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'] = $message;
5200c026 1028 }
5200c026 1029 }
1030}
6206f6c4 1031/***********************************************/
1032/* End of block for handling incoming url vars */
1033/***********************************************/
1034
9f42bfc8 1035$messagebody = '';
c4ad259b 1036do_hook('read_body_top');
1037if ($show_html_default == 1) {
1038 $ent_ar = $message->findDisplayEntity(array());
1039} else {
1040 $ent_ar = $message->findDisplayEntity(array(), array('text/plain'));
1041}
a128c967 1042$cnt = count($ent_ar);
1043for ($i = 0; $i < $cnt; $i++) {
6a108031 1044 $messagebody .= formatBody($imapConnection, $message, $color, $wrap_at, $ent_ar[$i], $passed_id, $mailbox);
a128c967 1045 if ($i != $cnt-1) {
83ae18bc 1046 $messagebody .= '<hr style="height: 1px;" />';
a128c967 1047 }
38c944cc 1048}
e55c441a 1049
202bcbcc 1050/**
1051 * Write mailbox with updated seen flag information back to cache.
1052 */
1053$mailbox_cache[$iAccount.'_'.$aMailbox['NAME']] = $aMailbox;
1054sqsession_register($mailbox_cache,'mailbox_cache');
1055$_SESSION['mailbox_cache'] = $mailbox_cache;
202bcbcc 1056
b89ceca6 1057displayPageHeader($color, $mailbox,'','');
324ac3c5 1058formatMenuBar($aMailbox, $passed_id, $passed_ent_id, $message,false);
e0e30169 1059formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message, $color, $FirstTimeSee);
a94c1db1 1060echo '<table width="100%" cellpadding="0" cellspacing="0" align="center" border="0">';
6206f6c4 1061echo ' <tr><td>';
a94c1db1 1062echo ' <table width="100%" cellpadding="1" cellspacing="0" align="center" border="0" bgcolor="'.$color[9].'">';
a128c967 1063echo ' <tr><td>';
a94c1db1 1064echo ' <table width="100%" cellpadding="3" cellspacing="0" align="center" border="0">';
6206f6c4 1065echo ' <tr bgcolor="'.$color[4].'"><td>';
98fb28fd 1066// echo ' <table cellpadding="1" cellspacing="5" align="left" border="0">';
605ce385 1067echo html_tag( 'table' ,'' , 'left', '', 'width="100%" cellpadding="1" cellspacing="5" border="0"' );
3c621ba1 1068echo ' <tr>' . html_tag( 'td', '<br />'. $messagebody."\n", 'left')
6c7b5d8c 1069 . '</tr>';
6206f6c4 1070echo ' </table>';
4669e892 1071echo ' </td></tr>';
6206f6c4 1072echo ' </table></td></tr>';
2ffa3f57 1073echo ' </table>';
1074echo ' </td></tr>';
a128c967 1075
3c621ba1 1076echo '<tr><td height="5" colspan="2" bgcolor="'.
1077 $color[4].'"></td></tr>'."\n";
d0a2476a 1078
a128c967 1079$attachmentsdisplay = formatAttachments($message,$ent_ar,$mailbox, $passed_id);
1080if ($attachmentsdisplay) {
8acd2fb5 1081 echo ' </table>';
6206f6c4 1082 echo ' <table width="100%" cellpadding="1" cellspacing="0" align="center"'.' border="0" bgcolor="'.$color[9].'">';
2ffa3f57 1083 echo ' <tr><td>';
d0a2476a 1084 echo ' <table width="100%" cellpadding="0" cellspacing="0" align="center" border="0" bgcolor="'.$color[4].'">';
4669e892 1085 echo ' <tr>' . html_tag( 'td', '', 'left', $color[9] );
6206f6c4 1086 echo ' <b>' . _("Attachments") . ':</b>';
1087 echo ' </td></tr>';
1088 echo ' <tr><td>';
1089 echo ' <table width="100%" cellpadding="2" cellspacing="2" align="center"'.' border="0" bgcolor="'.$color[0].'"><tr><td>';
1090 echo $attachmentsdisplay;
1091 echo ' </td></tr></table>';
6c7b5d8c 1092 echo ' </td></tr></table>';
6206f6c4 1093 echo ' </td></tr>';
3c621ba1 1094 echo '<tr><td height="5" colspan="2" bgcolor="'.
1095 $color[4].'"></td></tr>';
a128c967 1096}
c615b1da 1097echo '</table>';
a07cd1a4 1098
1099/* show attached images inline -- if pref'fed so */
5be9f195 1100if (($attachment_common_show_images) &&
a07cd1a4 1101 is_array($attachment_common_show_images_list)) {
1102 foreach ($attachment_common_show_images_list as $img) {
ce274df9 1103 $imgurl = SM_PATH . 'src/download.php' .
57257333 1104 '?' .
cd7b8833 1105 'passed_id=' . urlencode($img['passed_id']) .
3d570ba0 1106 '&amp;mailbox=' . urlencode($mailbox) .
ff9d4297 1107 '&amp;ent_id=' . urlencode($img['ent_id']) .
3d570ba0 1108 '&amp;absolute_dl=true';
5be9f195 1109
b5058e9e 1110 echo html_tag( 'table', "\n" .
d9c1dccc 1111 html_tag( 'tr', "\n" .
3c621ba1 1112 html_tag( 'td', '<img src="' . $imgurl . '" />' ."\n", 'left'
d9c1dccc 1113 )
1114 ) ,
3c621ba1 1115 'center', '', 'cellspacing="0" border="0" cellpadding="2"');
10f0ce72 1116 }
a07cd1a4 1117}
1118
324ac3c5 1119formatMenuBar($aMailbox, $passed_id, $passed_ent_id, $message, false, FALSE);
1e150c97 1120
c615b1da 1121do_hook('read_body_bottom');
a07cd1a4 1122sqimap_logout($imapConnection);
51d66ea2 1123$oTemplate->display('footer.tpl');
7277191e 1124?>