Beispiel #1
0
 function url_action_mailbox($get)
 {
     global $user;
     global $imap;
     global $sort_types;
     global $client_sort_types;
     global $sticky_url;
     global $sort_filters;
     global $show_all_max;
     if ($user->logged_in) {
         do_work_hook('mailbox_page_start');
         $user->page_data['labels'] = array($user->str[13], $user->str[56], $user->str[58], $user->str[57]);
         if (isset($_SESSION['just_logged_in']) && $_SESSION['just_logged_in']) {
             if (isset($_SESSION['user_settings']['folder_check'])) {
                 $imap->get_unseen_status($_SESSION['user_settings']['folder_check']);
             }
         }
         if ($user->dsp_page == 'search') {
             return $this->url_action_search($get);
         }
         $user->page_data['mailbox_link_class'] = 'current_page';
         if (isset($_SESSION['search_terms'][0]['words'])) {
             $user->page_data['mailbox_search_words'] = $_SESSION['search_terms'][0]['words'];
         } else {
             $user->page_data['mailbox_search_words'] = '';
         }
         if (isset($_SESSION['search_terms'][0]['fld'])) {
             $user->page_data['fld_id'] = $_SESSION['search_terms'][0]['fld'];
         } else {
             $user->page_data['fld_id'] = 0;
         }
         if (isset($_SESSION['search_terms'][0]['location'])) {
             $user->page_data['location_id'] = $_SESSION['search_terms'][0]['location'];
         } else {
             $user->page_data['location_id'] = 0;
         }
         if (isset($_SESSION['user_settings']['top_page_links']) && $_SESSION['user_settings']['top_page_links']) {
             $user->page_data['top_page_links'] = true;
         } else {
             $user->page_data['top_page_links'] = false;
         }
         $mailbox = 'INBOX';
         if (isset($get['mailbox'])) {
             if (isset($_SESSION['folders'][$get['mailbox']])) {
                 $mailbox = $get['mailbox'];
             } elseif ($get['mailbox'] != $_SESSION['folders']['INBOX']['name']) {
                 $this->errors[] = $user->str[11] . ': ' . $user->htmlsafe($get['mailbox']);
             }
         }
         $filter_by = 'ALL';
         if (isset($get['filter_by'])) {
             if (isset($sort_filters[$get['filter_by']])) {
                 $filter_by = $get['filter_by'];
             }
         } else {
             if (isset($_SESSION['user_settings']['hide_deleted_messages']) && $_SESSION['user_settings']['hide_deleted_messages']) {
                 $filter_by = 'UNDELETED';
             }
         }
         $user->page_data['filter_by'] = $filter_by;
         if (isset($_SESSION['user_settings']['sort_by'][$mailbox])) {
             $sort_by = $_SESSION['user_settings']['sort_by'][$mailbox];
         } else {
             $sort_by = 'ARRIVAL';
         }
         if (isset($_SESSION['session_sort'][$mailbox])) {
             $sort_by = $_SESSION['session_sort'][$mailbox];
         }
         if (isset($get['sort_by'])) {
             if (stristr($_SESSION['imap_capability'], 'SORT')) {
                 $types = $sort_types;
             } else {
                 $types = $client_sort_types;
             }
             if (isset($types[$get['sort_by']])) {
                 $sort_by = $get['sort_by'];
                 $_SESSION['session_sort'][$mailbox] = $sort_by;
             }
         }
         if (isset($_SESSION['user_settings']['sent_folder']) && $_SESSION['user_settings']['sent_folder'] == $mailbox) {
             $user->page_data['labels'][1] = $user->str[55];
         }
         $unseen_refresh = false;
         if (isset($get['track_mail'])) {
             $sticky_url = preg_replace("/\\&track_mail=(1|0)/", '', $sticky_url);
             if ($get['track_mail']) {
                 if (isset($_SESSION['user_settings']['folder_check']) && is_array($_SESSION['user_settings']['folder_check'])) {
                     if (!in_array($mailbox, $_SESSION['user_settings']['folder_check'])) {
                         $folders = $_SESSION['user_settings']['folder_check'];
                         $folders[] = $mailbox;
                         usort($folders, 'new_folder_sort');
                         $_SESSION['user_settings']['folder_check'] = $folders;
                         $user->page_data['settings']['folder_check'] = $_SESSION['user_settings']['folder_check'];
                         $unseen_refresh = true;
                         $this->write_settings();
                     }
                 } else {
                     $_SESSION['user_settings']['folder_check'] = array($mailbox);
                     $user->page_data['settings']['folder_check'] = array($mailbox);
                     $user->page_data['settings']['folder_check'] = $_SESSION['user_settings']['folder_check'];
                     $this->write_settings();
                 }
             } else {
                 if (isset($_SESSION['user_settings']['folder_check']) && is_array($_SESSION['user_settings']['folder_check']) && in_array($mailbox, $_SESSION['user_settings']['folder_check'])) {
                     $new_folders = array();
                     foreach ($_SESSION['user_settings']['folder_check'] as $v) {
                         if ($v != $mailbox) {
                             $new_folders[] = $v;
                         }
                     }
                     $_SESSION['user_settings']['folder_check'] = $new_folders;
                     $user->page_data['settings']['folder_check'] = $new_folders;
                     $this->write_settings();
                 }
             }
         }
         $status = $imap->select_mailbox($mailbox, $sort_by, $unseen_refresh, false, $filter_by);
         do_work_hook('mailbox_page_selected');
         if ($status) {
             $page = 1;
             if (isset($get['mailbox_page'])) {
                 $page = (int) $get['mailbox_page'];
                 if (!$page) {
                     $page = 1;
                 }
             }
             if (isset($get['show_all_msg']) && $get['show_all_msg']) {
                 $page = 1;
                 $user->page_data['settings']['mailbox_per_page_count'] = $show_all_max;
                 if (count($_SESSION['uid_cache'][$mailbox]['uids']) > $show_all_max) {
                     $this->errors[] = 'Only displaying first ' . $show_all_max . ' messages out of ' . count($_SESSION['uid_cache'][$mailbox]['uids']);
                 }
                 $user->page_data['show_all_msg'] = 1;
             } else {
                 $user->page_data['show_all_msg'] = 0;
             }
             list($page, $uids) = $this->build_page_uids($mailbox, $page, $user->page_data['settings']['mailbox_per_page_count'], $_SESSION['uid_cache'][$mailbox]['uids']);
             $total = $_SESSION['uid_cache'][$mailbox]['total'];
             $unread = $_SESSION['folders'][$mailbox]['status']['unseen'];
             $user->page_data['mailbox_page'] = $page;
             $user->page_data['folder_unread'] = $unread;
             $user->page_data['mailbox_range'] = $user->page_data['settings']['mailbox_per_page_count'] * ($page - 1) + 1;
             if ($total < $user->page_data['mailbox_range'] - 1 + $user->page_data['settings']['mailbox_per_page_count']) {
                 $user->page_data['mailbox_range'] .= ' - ' . $total;
             } else {
                 $user->page_data['mailbox_range'] .= ' - ' . ($user->page_data['mailbox_range'] - 1 + $user->page_data['settings']['mailbox_per_page_count']);
             }
             if (!empty($uids)) {
                 /*if (!empty($_SESSION['uid_cache'][$mailbox]['thread_data'])) {
                       $total = count($_SESSION['uid_cache'][$mailbox]['threads']);
                       list($page, $uids) = $this->build_page_uids($mailbox, $page,
                       $user->page_data['settings']['mailbox_per_page_count'],
                       $_SESSION['uid_cache'][$mailbox]['threads']);
                   }*/
                 $user->page_data['header_list'] = $imap->get_mailbox_page($mailbox, $uids, $page);
                 $user->page_data['page_count'] = count($user->page_data['header_list']);
                 if (count($user->page_data['header_list']) > 14) {
                     $user->page_data['top_link'] = '<a href="' . $sticky_url . '#top">' . $user->str[186] . '</a>';
                 }
                 $user->page_data['mailbox_total'] = $_SESSION['folders'][$mailbox]['status']['messages'];
                 $user->page_data['thread_data'] = $_SESSION['uid_cache'][$mailbox]['thread_data'];
                 $user->page_data['page_links'] = build_page_links($page, $total, $user->page_data['settings']['mailbox_per_page_count'], '?page=mailbox&amp;sort_by=' . $sort_by . '&amp;filter_by=' . $filter_by . '&amp;mailbox=' . urlencode($mailbox));
             } else {
                 $user->page_data['header_list'] = array();
                 $user->page_data['page_links'] = '';
                 $user->page_data['mailbox_total'] = 0;
             }
             $user->page_data['sort_by'] = $sort_by;
             $user->page_data['mailbox'] = $mailbox;
             $user->page_data['url_mailbox'] = urlencode($mailbox);
             if ($mailbox == 'INBOX') {
                 $user->page_data['mailbox_dsp'] = $user->str[436];
             } else {
                 $user->page_data['mailbox_dsp'] = $user->htmlsafe($mailbox, 0, 0, 1);
             }
             $user->dsp_page = 'mailbox';
             if (isset($_SESSION['search_results'])) {
                 $user->page_data['search_results'] = $_SESSION['search_results'];
             }
             $user->page_data['folders'] = $_SESSION['folders'];
             $user->page_title .= ' | ' . $user->str[22] . ' |';
             if (isset($_SESSION['frozen_folders'][$mailbox])) {
                 $user->page_data['frozen_dsp'] = '<span id="frozen">(Mailbox Frozen)</span>';
             } else {
                 $user->page_data['frozen_dsp'] = '';
             }
         } else {
             $this->errors[] = $user->str[387] . ': ' . $user->htmlsafe($mailbox);
         }
     }
 }
Beispiel #2
0
 /**
  * Build ajax response for a folder page
  */
 protected function output()
 {
     $res = array();
     if ($this->get('imap_mailbox_page')) {
         prepare_imap_message_list($this->get('imap_mailbox_page'), $this, false);
         $this->out('page_links', build_page_links($this->get('imap_folder_detail'), $this->get('imap_mailbox_page_path')));
     } elseif (!$this->get('formatted_message_list')) {
         $this->out('formatted_message_list', array());
     }
 }
Beispiel #3
0
 function print_search_res($cols = array(), $onclick = false, $headers = true)
 {
     $n = 1;
     $data = '<div id="search_page_inner">';
     $empty = true;
     foreach ($this->pd['search_results'] as $vals) {
         if (isset($vals['headers']) && !empty($vals['headers'])) {
             $empty = false;
             break;
         }
     }
     if (!$empty) {
         $data .= '<table class="search_res_table" cellpadding="0" cellspacing="0" width="100%">';
         if ($headers) {
             $data .= '<tr>' . $this->print_mailbox_list_headers() . '</tr>';
         }
         $cnt = 0;
         $start = $this->pd['search_start'];
         $end = $this->pd['search_end'];
         foreach ($this->pd['search_results'] as $i => $array) {
             $list = array();
             foreach ($array['headers'] as $vals) {
                 $cnt++;
                 if ($start && $end && ($cnt < $start || $cnt > $end)) {
                     continue;
                 }
                 $list[] = $vals;
             }
             if (empty($list)) {
                 continue;
             }
             $array['headers'] = $list;
             if (!isset($array['total'])) {
                 $array['total'] = 0;
             }
             $data .= '<tr><td colspan="' . count($this->msg_list_flds) . '"><h4>' . $array['total'] . '&#160;&#160;<a title="' . $this->user->htmlsafe($i, 0, 0, 1) . '" href="?page=mailbox&amp;mailbox=' . urlencode($i) . '">' . $this->user->htmlsafe($this->pd['folders'][$i]['basename'], 0, 0, 1) . '</a></h4></td></tr>';
             if (!empty($array['headers'])) {
                 $data .= $this->print_mailbox_list_rows($this->msg_list_flds, $array['headers'], $this->onclick, $i, $n);
                 $n += count($array['headers']);
             } else {
                 $data .= '<tr><td colspan="' . count($this->msg_list_flds) . '"><div class="empty_unread">No matching search results in this folder</div></td></tr>';
             }
         }
         $_SESSION['toggle_all'] = false;
         $_SESSION['toggle_uids'] = array();
         $_SESSION['toggle_boxes'] = array();
         $data .= '</table>';
         //<input type="hidden" id="page_count" value="'.($n - 1).'" />';
         $data .= build_page_links($this->pd['mailbox_page'], $this->pd['search_total'], $this->pd['search_per_page'], '?page=search');
     } else {
         $data .= '<div class="empty_search_res">' . $this->user->str[90] . '</div>';
     }
     $data .= '</div>';
     return $data;
 }
Beispiel #4
0
 function url_action_message($get)
 {
     global $sort_types;
     global $client_sort_types;
     global $max_read_length;
     global $user;
     global $imap;
     global $include_path;
     global $message_part_types;
     global $override_missing_mime_header;
     global $add_contact_headers;
     global $conf;
     global $sort_filters;
     global $fd;
     global $sticky_url;
     $user->page_data['top_link'] = '<a href="' . $sticky_url . '#top">' . $user->str[186] . '</a>';
     if ($user->logged_in) {
         if (isset($_SESSION['iframe_content']) && $_SESSION['iframe_content'] && isset($get['inline_html']) && $get['inline_html']) {
             ob_clean();
             echo $_SESSION['iframe_content'];
             unset($_SESSION['iframe_content']);
             exit;
         }
         do_work_hook('message_page_start');
         $user->page_data['unseen_uids'] = 0;
         $user->page_data['show_previous_options'] = 0;
         $user->page_data['show_up_options'] = 0;
         $user->page_data['show_next_options'] = 0;
         $user->page_data['full_header'] = -1;
         $user->page_data['full_part_header'] = -1;
         $user->page_data['message_part_headers'] = array();
         $user->page_data['sort_filters'] = array('ALL' => 'All messages', 'UNSEEN' => 'Unread', 'SEEN' => 'Read', 'FLAGGED' => 'Flagged', 'UNFLAGGED' => 'Unflagged', 'ANSWERED' => 'Answered', 'UNANSWERED' => 'Unanswered', 'DELETED' => 'Deleted', 'UNDELETED' => 'Not Deleted');
         $user->page_data['message_link_class'] = 'current_page';
         $mailbox = false;
         if (isset($get['mailbox'])) {
             if (isset($_SESSION['folders'][$get['mailbox']])) {
                 $mailbox = $get['mailbox'];
             }
         }
         if (isset($get['full_part_header'])) {
             $user->page_data['full_part_header'] = intval($get['full_part_header']);
         }
         if (isset($get['full_header'])) {
             $user->page_data['full_header'] = intval($get['full_header']);
         }
         if (isset($get['find_response']) && isset($get['current_uid']) && isset($get['response_id'])) {
             $uid = false;
             if (isset($_SESSION['user_settings']['sent_folder'])) {
                 $select_res = $imap->select_mailbox($_SESSION['user_settings']['sent_folder'], false, false, true);
                 if ($select_res) {
                     $search_res = $imap->simple_search('header in-reply-to', false, $get['response_id']);
                     if (isset($search_res[0])) {
                         $get['uid'] = $search_res[0];
                         $uid = $get['uid'];
                         $mailbox = $_SESSION['user_settings']['sent_folder'];
                         $_GET['mailbox'] = $mailbox;
                         $this->errors[] = $user->str[388];
                     }
                 }
             }
             if (!$uid) {
                 $get['uid'] = $get['current_uid'];
                 $this->errors[] = $user->str[389];
             }
         }
         if ($mailbox && isset($get['uid'])) {
             if (isset($_SESSION['frozen_folders'][$mailbox])) {
                 $user->page_data['frozen_dsp'] = '<span id="frozen">(Mailbox Frozen)</span>';
             } else {
                 $user->page_data['frozen_dsp'] = '';
             }
             $id = (int) $get['uid'];
             if ($id) {
                 $sort_by = 'ARRIVAL';
                 if (isset($get['sort_by'])) {
                     if (stristr($_SESSION['imap_capability'], 'SORT')) {
                         $types = $sort_types;
                     } else {
                         $types = $client_sort_types;
                     }
                     if (isset($types[$get['sort_by']])) {
                         $sort_by = $get['sort_by'];
                     }
                 }
                 $filter_by = 'ALL';
                 if (isset($get['filter_by'])) {
                     if (isset($sort_filters[$get['filter_by']])) {
                         $filter_by = $get['filter_by'];
                     }
                 }
                 $user->page_data['filter_by'] = $filter_by;
                 $user->page_data['sort_by'] = $sort_by;
                 if ($imap->select_mailbox($mailbox, $sort_by, false, true, $filter_by)) {
                     do_work_hook('message_page_selected');
                     $user->page_data['mailbox'] = $mailbox;
                     if ($mailbox == 'INBOX') {
                         $user->page_data['mailbox_dsp'] = $user->str[436];
                     } else {
                         $user->page_data['mailbox_dsp'] = $user->htmlsafe($mailbox, 0, 0, 1);
                     }
                     $user->page_data['url_mailbox'] = urlencode($mailbox);
                     if ((!isset($get['show_all_mp']) || !$get['show_all_mp']) && isset($_SESSION['user_settings']['short_message_parts']) && $_SESSION['user_settings']['short_message_parts']) {
                         if (isset($_SESSION['user_settings']['html_first']) && $_SESSION['user_settings']['html_first']) {
                             $mfilter = 'html';
                         } else {
                             $mfilter = 'plain';
                         }
                     } else {
                         $mfilter = false;
                     }
                     if (!isset($get['show_all_mp']) || !$get['show_all_mp']) {
                         $user->page_data['show_all_mp'] = false;
                     } else {
                         $user->page_data['show_all_mp'] = true;
                     }
                     if ($mfilter) {
                         list($struct, $user->page_data['filtered_mp']) = $imap->get_message_structure($id, $mfilter);
                     } else {
                         $user->page_data['filtered_mp'] = 0;
                         $struct = $imap->get_message_structure($id);
                     }
                     $flat_list = $this->get_flat_part_list($struct);
                     $user->page_data['part_nav_list'] = $flat_list;
                     if (isset($get['message_part'])) {
                         $mpart = $get['message_part'];
                     } else {
                         $mpart = 0;
                     }
                     $sort_by = 'ARRIVAL';
                     if (!isset($get['show_image']) && !isset($get['download']) || isset($get['framed_part'])) {
                         $user->page_data['full_message_headers'] = $imap->get_message_headers($id, false);
                     }
                     if ($override_missing_mime_header) {
                         $struct = $this->override_missing_mime_header($struct, $user->page_data['full_message_headers']);
                     }
                     if (isset($_SESSION['user_settings']['html_first']) && $_SESSION['user_settings']['html_first']) {
                         list($message_data, $viewable) = $this->find_message_part($struct, $mpart, 'text', 'html');
                         if (empty($message_data) && !empty($viewable)) {
                             list($message_data, $viewable) = $this->find_message_part($struct, $viewable[0]);
                         }
                     } else {
                         list($message_data, $viewable) = $this->find_message_part($struct, $mpart, 'text', 'plain');
                         if (empty($message_data) && !empty($viewable)) {
                             list($message_data, $viewable) = $this->find_message_part($struct, $viewable[0]);
                         }
                     }
                     if (isset($get['raw_view']) && $get['raw_view']) {
                         $raw = 1;
                         $message_data['imap_id'] = 0;
                         $message_data['type'] = 'text';
                         $message_data['subtype'] = 'plain';
                     } else {
                         $raw = 0;
                     }
                     if (empty($message_data) && !empty($user->page_data['full_message_headers'])) {
                         $message_data['imap_id'] = 0;
                         $message_data['type'] = 'text';
                         $message_data['subtype'] = 'plain';
                         $user->page_data['broken_msg'] = true;
                     }
                     $user->page_data['raw_view'] = $raw;
                     $user->page_data['message_struct'] = $struct;
                     $user->page_data['message_uid'] = $id;
                     $user->page_data['message_part'] = $mpart;
                     $count = $_SESSION['uid_cache'][$mailbox]['total'];
                     $page = 1;
                     if (isset($get['mailbox_page'])) {
                         $page = (int) $get['mailbox_page'];
                         if (!$page) {
                             $page = 1;
                         }
                     }
                     $user->page_data['previous_uid'] = false;
                     $user->page_data['uid_index'] = false;
                     $user->page_data['next_uid'] = false;
                     for ($i = 0; $i < $count; $i++) {
                         if ($id == $_SESSION['uid_cache'][$mailbox]['uids'][$i]) {
                             $page = floor($i / $user->page_data['settings']['mailbox_per_page_count']) + 1;
                             $user->page_data['uid_index'] = $i;
                             if (isset($_SESSION['uid_cache'][$mailbox]['uids'][$i + 1])) {
                                 $user->page_data['next_uid'] = $_SESSION['uid_cache'][$mailbox]['uids'][$i + 1];
                                 $user->page_data['next_uid_page'] = floor(($i + 1) / $user->page_data['settings']['mailbox_per_page_count']) + 1;
                             }
                             if (isset($_SESSION['uid_cache'][$mailbox]['uids'][$i - 1])) {
                                 $user->page_data['previous_uid'] = $_SESSION['uid_cache'][$mailbox]['uids'][$i - 1];
                                 $user->page_data['prev_uid_page'] = floor(($i - 1) / $user->page_data['settings']['mailbox_per_page_count']) + 1;
                             }
                             break;
                         }
                     }
                     $user->page_data['show_small_headers'] = 0;
                     $user->page_data['show_full_headers'] = 0;
                     if (isset($get['full_headers']) && $get['full_headers']) {
                         $user->page_data['show_full_headers'] = 1;
                     } elseif (isset($get['small_headers']) && $get['small_headers']) {
                         $user->page_data['show_small_headers'] = 1;
                     }
                     if (!empty($message_data)) {
                         $user->page_data['message_part'] = $message_data['imap_id'];
                         $type = strtolower($message_data['type'] . '/' . $message_data['subtype']);
                         $user->page_data['charset'] = 'us-ascii';
                         if (isset($message_data['charset'])) {
                             $user->page_data['charset'] = strtolower($message_data['charset']);
                         }
                         $user->page_data['raw_message_type'] = $type;
                         if (isset($message_part_types[$type]) || isset($get['download'])) {
                             $user->page_data['message_type'] = false;
                             if (isset($message_part_types[$type])) {
                                 $user->page_data['message_type'] = $message_part_types[$type];
                             }
                             if (isset($get['show_image']) && strtolower($message_data['type'] == 'image')) {
                                 $data = $imap->get_message_part($id, $message_data['imap_id']);
                                 if (isset($message_data['encoding']) && strtolower($message_data['encoding']) == 'base64') {
                                     $data = base64_decode($data);
                                 } elseif (isset($message_data['encoding']) && strtolower($message_data['encoding']) == 'quoted-printable') {
                                     $data = quoted_printable_decode($data);
                                 }
                                 ob_end_clean();
                                 if ($data) {
                                     if (isset($get['thumbnail']) && $get['thumbnail'] && function_exists('imagecreatefromstring')) {
                                         $im = @imagecreatefromstring($data);
                                         $width = imagesx($im);
                                         $height = imagesy($im);
                                         $max_width = 80;
                                         $max_height = 60;
                                         if ($width > $max_width) {
                                             $new_width = $max_width;
                                             $new_height = $new_width * $height / $width;
                                             if ($new_height > $max_height) {
                                                 $new_height = $max_height;
                                                 $new_width = $new_height * $width / $height;
                                             }
                                         } elseif ($height > $max_height) {
                                             $new_height = $max_height;
                                             $new_width = $new_height * $width / $height;
                                         } else {
                                             $new_height = $height;
                                             $new_width = $width;
                                         }
                                         if (!$new_height || !$new_width) {
                                             $new_height = 50;
                                             $new_width = 50;
                                         }
                                         $im2 = @imagecreatetruecolor($new_width, $new_height);
                                         if ($im2 !== false && $im !== false) {
                                             imagecolortransparent($im2, imagecolorallocate($im2, 0, 0, 0));
                                             imagealphablending($im2, false);
                                             imagesavealpha($im2, true);
                                             imagecopyresampled($im2, $im, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
                                             imagepng($im2);
                                         }
                                         $imap->disconnect();
                                         $user->clean_up();
                                         exit;
                                     }
                                     $size = (int) $message_data['size'];
                                     header("Content-Type: " . $type);
                                     header("Content-Length: " . strlen($data));
                                     echo $data;
                                     $imap->disconnect();
                                     $user->clean_up();
                                     exit;
                                 }
                             } elseif (isset($get['framed_part'])) {
                                 if (isset($message_data['filename']) && $message_data['filename']) {
                                     $name = $message_data['filename'];
                                 } elseif (isset($message_data['name']) && $message_data['name']) {
                                     $name = $message_data['name'];
                                 } else {
                                     $name = 'message_' . $message_data['imap_id'];
                                 }
                                 $exten = get_mimetype_extension($type);
                                 if (strtolower(substr($name, -4)) != $exten) {
                                     $name .= $exten;
                                 }
                                 $encoding = false;
                                 if (isset($message_data['encoding']) && strtolower($message_data['encoding']) == 'base64') {
                                     $encoding = 'base64_decode';
                                 } elseif (isset($message_data['encoding']) && strtolower($message_data['encoding'] == 'quoted-printable')) {
                                     $encoding = 'quoted_decode';
                                 }
                                 $left_over = '';
                                 $read_size = 0;
                                 $lit_size = $imap->get_message_part_start($id, $message_data['imap_id']);
                                 header("Content-Type: {$type}");
                                 header('Content-Transfer-Encoding: binary');
                                 header('Accept-Ranges: bytes');
                                 header("Pragma: public");
                                 header("Expires: 0");
                                 header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                                 ob_end_clean();
                                 while ($data = $imap->get_message_part_line()) {
                                     $read_size += strlen($data);
                                     if ($read_size > $lit_size) {
                                         $extra = $read_size - $lit_size;
                                         if (strlen($data) > $extra) {
                                             $data = substr($data, 0, strlen($data) - $extra);
                                         } else {
                                             $data = false;
                                         }
                                     }
                                     if ($data && $encoding == 'base64_decode') {
                                         $data = base64_decode($data);
                                     } elseif ($data && $encoding == 'quoted_decode') {
                                         $data = $user->user_action->quoted_decode($data);
                                     }
                                     if ($data) {
                                         echo $data;
                                         flush();
                                     }
                                     $data = false;
                                 }
                                 $imap->disconnect();
                                 $user->clean_up();
                                 exit;
                             } elseif (isset($get['download'])) {
                                 if (isset($message_data['filename']) && $message_data['filename']) {
                                     $name = $message_data['filename'];
                                 } elseif (isset($message_data['name']) && $message_data['name']) {
                                     $name = $message_data['name'];
                                 } else {
                                     $name = 'message_' . $message_data['imap_id'];
                                 }
                                 $exten = get_mimetype_extension($type);
                                 if (strtolower(substr($name, -4)) != $exten) {
                                     $name .= $exten;
                                 }
                                 $encoding = false;
                                 if (isset($message_data['encoding']) && strtolower($message_data['encoding']) == 'base64') {
                                     $encoding = 'base64_decode';
                                 } elseif (isset($message_data['encoding']) && strtolower($message_data['encoding'] == 'quoted-printable')) {
                                     $encoding = 'quoted_decode';
                                 }
                                 $left_over = '';
                                 $read_size = 0;
                                 $lit_size = $imap->get_message_part_start($id, $message_data['imap_id']);
                                 header("Content-Type: text");
                                 //$type");
                                 header('Content-Transfer-Encoding: binary');
                                 header('Accept-Ranges: bytes');
                                 if (isset($message_data['att_size']) && intval($message_data['att_size']) > 0) {
                                     header('Content-Length: ' . $message_data['att_size']);
                                 } elseif (!$encoding && intval($lit_size) > 0) {
                                     header('Content-Length: ' . $lit_size);
                                 }
                                 header("Pragma: public");
                                 header("Expires: 0");
                                 header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                                 header('Content-Disposition: attachment; filename="' . $name . '"');
                                 ob_end_clean();
                                 while ($data = $imap->get_message_part_line()) {
                                     $read_size += strlen($data);
                                     if ($read_size > $lit_size) {
                                         $extra = $read_size - $lit_size;
                                         if (strlen($data) > $extra) {
                                             $data = substr($data, 0, strlen($data) - $extra);
                                         } else {
                                             $data = false;
                                         }
                                     }
                                     if ($data && $encoding == 'base64_decode') {
                                         $data = base64_decode($data);
                                     } elseif ($data && $encoding == 'quoted_decode') {
                                         $data = $user->user_action->quoted_decode($data);
                                     }
                                     if ($data) {
                                         echo $data;
                                     }
                                     $data = false;
                                 }
                                 $imap->disconnect();
                                 $user->clean_up();
                                 ob_flush();
                                 flush();
                                 exit;
                             } else {
                                 /*if (isset($_SESSION['header_cache'][$mailbox][$page][$id]['flags'])) {
                                       if (!stristr($_SESSION['header_cache'][$mailbox][$page][$id]['flags'], 'seen')) {
                                           if (isset($_SESSION['folders'][$mailbox]['status']['unseen']) && $_SESSION['folders'][$mailbox]['status']['unseen'] > 0) {
                                               $_SESSION['folders'][$mailbox]['status']['unseen'] -= 1;
                                               $user->page_data['folders'] = $_SESSION['folders'];
                                           }
                                       }
                                       if (!stristr($_SESSION['header_cache'][$mailbox][$page][$id]['flags'], 'Seen')) {
                                           $_SESSION['header_cache'][$mailbox][$page][$id]['flags'] .= ' \Seen';
                                           if (isset($_SESSION['total_unread']) && $_SESSION['total_unread'] > 0 &&
                                               isset($_SESSION['user_settings']['folder_check']) && is_array($_SESSION['user_settings']['folder_check']) &&
                                               in_array($mailbox, $_SESSION['user_settings']['folder_check'])) {
                                               $_SESSION['total_unread']--;
                                           }
                                       }
                                   }*/
                                 if (!isset($user->page_data['full_message_headers'])) {
                                     $user->page_data['full_message_headers'] = $imap->get_message_headers($id, false);
                                 }
                                 $user->page_data['message_headers'] = $this->prep_headers($user->page_data['full_message_headers']);
                                 if (!$user->page_data['charset']) {
                                     foreach ($user->page_data['message_headers'] as $vals) {
                                         if (strtolower($vals[0]) == 'content-type') {
                                             if (preg_match("/charset=([^\\s;]+)/", $vals[1], $matches)) {
                                                 $user->page_data['charset'] = trim(str_replace(array("'", '"'), '', $matches[1]));
                                             }
                                             break;
                                         }
                                     }
                                 }
                                 if (count($user->page_data['part_nav_list']) > 1) {
                                     $parent_id = 0;
                                     foreach ($flat_list as $vals) {
                                         if ($vals[0] == $message_data['imap_id'] && $vals[1]) {
                                             $parent_id = $vals[1];
                                             break;
                                         }
                                     }
                                     if ($parent_id && $parent_id != 1) {
                                         $user->page_data['message_part_headers'] = $this->prep_headers($imap->get_message_headers($id, $parent_id));
                                     }
                                 }
                                 if ($raw) {
                                     $user->page_data['message_data'] = $imap->get_message_part($id, false, $raw, $max_read_length);
                                     if (isset($user->page_data['message_part_headers'])) {
                                         unset($user->page_data['message_part_headers']);
                                     }
                                     $user->page_data['part_nav_list'] = array();
                                 } elseif ($message_part_types[$type] == 'text' || $message_part_types[$type] == 'html') {
                                     $user->page_data['message_data'] = $imap->get_message_part($id, $message_data['imap_id'], $raw, $max_read_length);
                                     if ($imap->max_read) {
                                         $this->errors[] = $user->str[390];
                                         $imap->max_read = false;
                                     }
                                     if ($message_part_types[$type] == 'html') {
                                         if (isset($get['show_external_images'])) {
                                             if ($get['show_external_images']) {
                                                 $user->page_data['show_external_images'] = true;
                                             } else {
                                                 $user->page_data['show_external_images'] = false;
                                             }
                                         }
                                     }
                                     if (!$raw) {
                                         if (isset($message_data['encoding']) && strtolower($message_data['encoding']) == 'base64') {
                                             $user->page_data['message_data'] = base64_decode($user->page_data['message_data']);
                                         } elseif (isset($message_data['encoding']) && strtolower($message_data['encoding'] == 'quoted-printable')) {
                                             $user->page_data['message_data'] = $user->user_action->quoted_decode($user->page_data['message_data']);
                                         }
                                     }
                                     if (isset($conf['html_message_iframe']) && $conf['html_message_iframe'] && $message_part_types[$type] == 'html') {
                                         if ($user->sub_class_names['url']) {
                                             $class_name = 'site_page_' . $user->sub_class_names['url'];
                                             $pd = hm_new($class_name);
                                         } else {
                                             $pd = hm_new('site_page');
                                         }
                                         $_SESSION['iframe_content'] = $pd->print_message_iframe_content();
                                     }
                                     if (strstr($type, 'x-vcard')) {
                                         require_once $include_path . 'lib' . $fd . 'vcard.php';
                                         $vcard = hm_new('vcard');
                                         $vcard->import_card(explode("\r\n", $user->page_data['message_data']));
                                         if (is_array($vcard->card) && !empty($vcard->card)) {
                                             $user->page_data['card_detail'] = $vcard->card;
                                             $_SESSION['import_card_detail'] = $vcard->card;
                                         }
                                     }
                                 }
                             }
                         }
                     }
                     if (!isset($user->page_data['full_message_headers'])) {
                         $user->page_data['full_message_headers'] = $imap->get_message_headers($id, false);
                     }
                     if (!isset($user->page_data['charset'])) {
                         $user->page_data['charset'] = false;
                         if (isset($user->page_data['message_headers'])) {
                             foreach ($user->page_data['message_headers'] as $vals) {
                                 if (strtolower($vals[0]) == 'content-type') {
                                     if (preg_match("/charset=([^ ]+)/", $vals[1], $matches)) {
                                         $user->page_data['charset'] = trim(str_replace(array("'", '"'), '', $matches[1]));
                                     }
                                     break;
                                 }
                             }
                         }
                     }
                     $user->page_data['mailbox_page'] = $page;
                     $user->page_data['mailbox_total'] = $_SESSION['uid_cache'][$mailbox]['total'];
                     $user->page_data['page_links'] = build_page_links($page, $_SESSION['uid_cache'][$mailbox]['total'], $user->page_data['settings']['mailbox_per_page_count'], '?page=mailbox&amp;sort_by=' . $sort_by . '&amp;filter_by=' . $filter_by . '&amp;mailbox=' . urlencode($mailbox), $user->str[88]);
                     $user->dsp_page = 'message';
                     $_SESSION['last_message_read'][$mailbox] = $id;
                     if (isset($get['print_view']) && $get['print_view']) {
                         ob_clean();
                         if ($user->sub_class_names['url']) {
                             $class_name = 'site_page_' . $user->sub_class_names['url'];
                             $pd = hm_new($class_name);
                         } else {
                             $pd = hm_new('site_page');
                         }
                         echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                           <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
                             <head><title>Message Print View</title><base href="' . $pd->pd['base_href'] . '" /><title id="title">' . $pd->user->page_title . '</title>
                             <style type="text/css">table {padding:10px;margin-left:-10px;padding-bottom:20px;}
                             b{font-weight: normal;} table td {padding-left:10px;} table th {text-align:left;font-weight:normal;}
                             pre {white-space: pre-wrap; white-space: -moz-pre-wrap !important; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;}
                             </style></head>
                         <body style="background: none; background-image: none; background-color: #fff; color: #000; margin: 30px;">' . '<table>' . $pd->print_message_headers() . '</table>';
                         if (isset($pd->pd['message_part_headers'])) {
                             '<table>' . $pd->print_part_headers() . '</table>';
                         }
                         //$pd->pd['raw_view'] = true;
                         switch ($user->page_data['message_type']) {
                             case 'text':
                             case 'image':
                             case 'html':
                                 echo $pd->{'print_message_' . $user->page_data['message_type']}();
                                 break;
                             default:
                                 echo '<div style="text-align: center; margin-top: 100px;">Unsupported MIME type: ' . $user->htmlsafe($user->page_data['raw_message_type']) . '</div>';
                                 break;
                         }
                         echo '
                     </body>
                     </html>';
                         exit;
                     }
                     if (isset($get['show_up_options'])) {
                         $user->page_data['show_up_options'] = 1;
                     }
                     if (isset($get['show_next_options'])) {
                         $user->page_data['show_next_options'] = 1;
                     }
                     if (isset($get['show_previous_options'])) {
                         $user->page_data['show_previous_options'] = 1;
                     }
                     $new_contacts = array();
                     if (isset($user->page_data['full_message_headers'])) {
                         foreach ($user->page_data['full_message_headers'] as $vals) {
                             $i = $vals[0];
                             $v = $vals[1];
                             if (!in_array(strtolower($i), $add_contact_headers)) {
                                 continue;
                             }
                             if (strstr($v, ' ')) {
                                 $bits = explode(' ', trim($v));
                             } elseif (strstr($v, ',')) {
                                 $bits = explode(',', trim($v));
                             } else {
                                 $bits = array($v);
                             }
                             foreach ($bits as $val) {
                                 $val = rtrim(ltrim($val, '<,'), '>,');
                                 if ($this->match_email($val)) {
                                     $new_contacts[] = $val;
                                 }
                             }
                         }
                     }
                     $user->page_data['new_contacts'] = $new_contacts;
                     list($total_unread, $user->page_data['unseen_uids']) = $imap->get_mailbox_unseen($mailbox);
                     if ($total_unread) {
                         $user->page_data['unseen_uids'][] = $user->page_data['message_uid'];
                         $user->page_data['unseen_uids'] = $this->sort_uid_list($user->page_data['unseen_uids'], $mailbox);
                     }
                     if (isset($_SESSION['search_results'][$mailbox])) {
                         $user->page_data['search_results'] = $this->sort_uid_list($_SESSION['search_results'][$mailbox], $mailbox);
                     }
                     if (isset($_SESSION['uid_cache'][$mailbox]['thread_data'])) {
                         $user->page_data['thread_data'] = $_SESSION['uid_cache'][$mailbox]['thread_data'];
                     }
                     $user->page_data['folders'] = $_SESSION['folders'];
                     $user->page_title .= ' | Message |';
                 }
             }
         }
     }
 }