Source for file read_body.php
Documentation is available at read_body.php
* This file is used for reading the msgs array and displaying
* the resulting emails in the right frame.
* @copyright © 1999-2006 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id: read_body.php,v 1.386 2006/10/06 21:58:17 stevetruckstuff Exp $
* Include the SquirrelMail initialization file.
require
('../include/init.php');
/* SquirrelMail required files. */
require_once(SM_PATH .
'functions/imap.php');
require_once(SM_PATH .
'functions/imap_asearch.php'); // => move to mailbox_display
require_once(SM_PATH .
'functions/mime.php');
require_once(SM_PATH .
'functions/date.php');
require_once(SM_PATH .
'functions/url_parser.php');
require_once(SM_PATH .
'functions/identity.php');
require_once(SM_PATH .
'functions/mailbox_display.php');
require_once(SM_PATH .
'functions/forms.php');
require_once(SM_PATH .
'functions/attachment_common.php');
* Given an IMAP message id number, this will look it up in the cached
* and sorted msgs array and return the index of the next message
* @param int $passed_id The current message UID
* @return the index of the next valid message from the array
if ($passed_id==
'backwards' ||
!is_array($uidset)) { // check for backwards compattibilty gpg plugin
* Given an IMAP message id number, this will look it up in the cached
* and sorted msgs array and return the index of the previous message
* @param int $passed_id The current message UID
* @return the index of the next valid message from the array
global $base_uri, $show_html_default;
if ($message->header->type0 ==
'message' &&
$message->header->type1 ==
'rfc822') {
$type0 =
$message->rfc822_header->content_type->type0;
$type1 =
$message->rfc822_header->content_type->type1;
$type0 =
$message->header->type0;
$type1 =
$message->header->type1;
if($type0 ==
'multipart' &&
($type1 ==
'alternative' ||
$type1 ==
'mixed' ||
$type1 ==
'related' ||
$type1==
'signed')) {
if ($message->findDisplayEntity(array(), array('text/html'), true)) {
* Normal single part message so check its type.
if($type0 ==
'text' &&
$type1 ==
'html') {
$vars =
array('passed_ent_id', 'show_more', 'show_more_cc', 'override_type0', 'override_type1', 'startMessage','where', 'what');
$new_link =
$base_uri .
'src/read_body.php?passed_id=' .
urlencode($passed_id) .
'&passed_ent_id=' .
urlencode($passed_ent_id) .
$new_link .=
'&' .
$var .
'=' .
urlencode($temp);
if($show_html_default ==
1) {
$new_link .=
'&show_html_default=0';
$new_link .=
'&show_html_default=1';
/* escaping $ doesn't work -> \x36 */
return ( in_array('$mdnsent',$aFlags,true) ||
function SendMDN ( $mailbox, $passed_id, $sender, $message, $imapConnection) {
$header =
$message->rfc822_header;
$content_type->properties['report-type']=
'disposition-notification';
$content_type->properties['charset']=
$default_charset;
$rfc822_header->content_type =
$content_type;
$rfc822_header->to[] =
$header->dnt;
$rfc822_header->subject =
_("Read:") .
' ' .
encodeHeader($header->subject);
// Patch #793504 Return Receipt Failing with <@> from Tim Craig (burny_md)
// This merely comes from compose.php and only happens when there is no
// email_addr specified in user's identity (which is the startup config)
if (ereg("^([^@%/]+)[@%/](.+)$", $username, $usernamedata)) {
$popuser =
$usernamedata[1];
$domain =
$usernamedata[2];
if(!isset
($identity)) $identity =
0;
$full_name =
$ident[$identity]['full_name'];
$from_mail =
$ident[$identity]['email_address'];
$from_addr =
'"'.
$full_name.
'" <'.
$from_mail.
'>';
$reply_to =
$ident[$identity]['reply_to'];
$from_mail =
"$popuser@$domain";
$rfc822_header->from =
$rfc822_header->parseAddress($from_addr,true);
$rfc822_header->reply_to =
$rfc822_header->parseAddress($reply_to,true);
foreach ($to_array as $line) {
$to .=
' '.
$line->getAddress();
$body =
_("Your message") .
"\r\n\r\n" .
"\t" .
_("Subject") .
': ' .
decodeHeader($header->subject,false,false) .
"\r\n" .
"\t" .
_("Sent") .
': ' .
$senton .
"\r\n" .
sprintf( _("Was displayed on %s"), $now );
if (isset
($languages[$squirrelmail_language]['XTRA_CODE']) &&
function_exists($languages[$squirrelmail_language]['XTRA_CODE'] .
'_encode')) {
$body =
call_user_func($languages[$squirrelmail_language]['XTRA_CODE'] .
'_encode', $body);
if (strtolower($default_charset) ==
'iso-2022-jp') {
if (mb_detect_encoding($body) ==
'ASCII') {
$special_encoding =
'8bit';
$body =
mb_convert_encoding($body, 'JIS');
$special_encoding =
'7bit';
$special_encoding =
'8bit';
$mime_header->type0 =
'text';
$mime_header->type1 =
'plain';
$mime_header->encoding =
$special_encoding;
$mime_header->encoding =
'us-ascii';
$mime_header->parameters['charset'] =
$default_charset;
$part1->mime_header =
$mime_header;
$original_recipient =
$to;
$original_message_id =
$header->message_id;
$report =
"Reporting-UA : $SERVER_NAME ; SquirrelMail (version $version) \r\n";
if ($original_recipient !=
'') {
$report .=
"Original-Recipient : $original_recipient\r\n";
$final_recipient =
$sender;
$report .=
"Final-Recipient: rfc822; $final_recipient\r\n" .
"Original-Message-ID : $original_message_id\r\n" .
"Disposition: manual-action/MDN-sent-manually; displayed\r\n";
$part2->setBody($report);
$mime_header->type0 =
'message';
$mime_header->type1 =
'disposition-notification';
$mime_header->encoding =
'us-ascii';
$part2->mime_header =
$mime_header;
$composeMessage->rfc822_header =
$rfc822_header;
$composeMessage->addEntity($part1);
$composeMessage->addEntity($part2);
require_once(SM_PATH .
'class/deliver/Deliver_SendMail.class.php');
// Check for outdated configuration
if (!isset
($sendmail_args)) {
if ($sendmail_path==
'/var/qmail/bin/qmail-inject') {
$sendmail_args =
'-i -t';
$stream =
$deliver->initStream($composeMessage,$sendmail_path);
require_once(SM_PATH .
'class/deliver/Deliver_SMTP.class.php');
$authPop =
(isset
($pop_before_smtp) &&
$pop_before_smtp) ?
true :
false;
$stream =
$deliver->initStream($composeMessage,$domain,0,
$smtpServerAddress, $smtpPort, $user, $pass, $authPop);
$length =
$deliver->mail($composeMessage, $stream);
$success =
$deliver->finalizeStream($stream);
$msg =
$deliver->dlv_msg;
if (! empty($deliver->dlv_server_msg)) {
_("Server replied:") .
' ' .
$deliver->dlv_ret_nr .
' ' .
require_once(SM_PATH .
'class/deliver/Deliver_IMAP.class.php');
$imap_deliver->mail($composeMessage, $imapConnection);
function ToggleMDNflag ($set ,$imapConnection, $mailbox, $passed_id) {
$cmd =
'STORE ' .
$passed_id .
' ' .
$sg .
'FLAGS ($MDNSent)';
global $show_more_cc, $show_more, $show_more_bcc,
if ((is_array($recipients)) &&
(isset
($recipients[0]))) {
} else if ($item ==
'cc') {
} else if ($item ==
'bcc') {
foreach ($recipients as $r) {
$oTemplate->assign('which_field', $item);
$oTemplate->assign('recipients', $a);
$oTemplate->assign('more_less_toggle_href', $url);
$oTemplate->assign('show_more', $show);
$string =
$oTemplate->fetch('read_recipient_list.tpl');
$show_xmailer_default, $mdn_user_support, $PHP_SELF, $javascript_on,
$squirrelmail_language, $oTemplate;
$mailbox =
$aMailbox['NAME'];
$header =
$message->rfc822_header;
$from_name =
$header->getAddr_s('from');
$from_name =
$header->getAddr_s('sender');
$env[_("From")] =
_("Unknown sender");
if ($default_use_priority) {
$oTemplate->assign('message_priority', $header->priority);
$env[_("Priority")] =
$oTemplate->fetch('read_message_priority.tpl');
if ($show_xmailer_default) {
$oTemplate->assign('xmailer', decodeHeader($header->xmailer));
$env[_("Mailer")] =
$oTemplate->fetch('read_xmailer.tpl');
$mdn_url =
set_url_var($PHP_SELF, 'passed_id', $passed_id);
$mdn_url =
set_url_var($PHP_SELF, 'passed_ent_id', $passed_ent_id);
$oTemplate->assign('read_receipt_sent', $message->is_mdnsent);
$oTemplate->assign('first_time_reading', $FirstTimeSee);
$oTemplate->assign('send_receipt_href', $mdn_url);
$env[_("Read Receipt")] =
$oTemplate->fetch('read_handle_receipt.tpl');
$env[_("Options")] =
formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color);
$oTemplate->assign('headers_to_display', $env);
$oTemplate->display('read_headers.tpl');
* @param string $mailbox Name of current mailbox
* @param int $passed_id UID of current message
* @param int $passed_ent_id Id of entity within message
* @param object $message Current message object
* @param object $mbx_response
function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removedVar, $nav_on_top =
TRUE) {
global $base_uri, $draft_folder, $where, $what, $sort,
$startMessage, $PHP_SELF, $save_as_draft,
$enable_forward_as_attachment, $imapConnection, $lastTargetMailbox,
$delete_prev_next_display, $show_copy_buttons,
$compose_new_win, $javascript_on, $compose_width, $compose_height,
//FIXME cleanup argument list, use $aMailbox where possible
$mailbox =
$aMailbox['NAME'];
$msgs_url =
$base_uri .
'src/';
// Create Prev & Next links
// Handle nested entities first (i.e. Mime Attach parts)
$prev_href =
$next_href =
$up_href =
$del_href =
$del_prev_href =
$del_next_href =
'';
$msg_list_href =
$search_href =
$view_msg_href =
'';
if (isset
($passed_ent_id) &&
$passed_ent_id) {
// code for navigating through attached message/rfc822 messages