Source for file download.php
Documentation is available at download.php
* Handles attachment downloads to the users computer.
* Also allows displaying of attachments when possible.
* @copyright 1999-2020 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id: download.php 14845 2020-01-07 08:09:34Z pdontthink $
/** This is the download page */
define('PAGE_NAME', 'download');
* Include the SquirrelMail initialization file.
require
('../include/init.php');
/* SquirrelMail required files. */
require
(SM_PATH .
'functions/imap_general.php');
require
(SM_PATH .
'functions/mailbox_display.php');
require
(SM_PATH .
'functions/mime.php');
* If a message is viewed from the search page, $aMailbox[$passed_id]['MESSAGE_OBJECT']
* is not initialized, which makes this page error out on line 65 with an
* undefined function. We need to include some additional files in case the
* object has not been initialized.
* TODO: Determine why the object in question is not initialized when coming from
* a search page and correct. Once that is done, we can remove these
require
(SM_PATH .
'functions/imap_messages.php');
require
(SM_PATH .
'functions/date.php');
header('Cache-Control: cache');
global $imap_stream_options; // in case not defined in config
$imapConnection =
sqimap_login($username, false, $imapServerAddress, $imapPort, 0, $imap_stream_options);
if (isset
($aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT']) &&
is_object($aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT']) ) {
$message =
$aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'];
$aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'] =
$message;
$subject =
$message->rfc822_header->subject;
// replace message with message part, if message part is requested.
if ($message->rfc822_header) {
$subject =
$message->rfc822_header->subject;
* lets redefine message as this particular entity that we wish to display.
* it should hold only the header for this entity. We need to fetch the body
* yet before we can display anything.
if (isset
($override_type0)) {
$type0 =
$override_type0;
if (isset
($override_type1)) {
$type1 =
$override_type1;
$filename =
$header->disposition->getProperty('filename');
$filename =
$header->disposition->getProperty('name');
$filename =
$header->getParameter('name');
$filename =
$header->getParameter('name');
// If name is not set, use subject of email
if ($type1 ==
'plain' &&
$type0 ==
'text')
else if ($type1 ==
'richtext' &&
$type0 ==
'text')
else if ($type1 ==
'postscript' &&
$type0 ==
'application')
else if ($type1 ==
'rfc822' &&
$type0 ==
'message')
$filename =
$filename .
'.' .
$suffix;
* Update mailbox_cache and close session in order to prevent
* script locking on larger downloads. SendDownloadHeaders() and
* mime_print_body_lines() don't write information to session.
* mime_print_body_lines() call duration depends on size of
* attachment and script can cause interface lockups, if session
$mailbox_cache[$aMailbox['NAME']] =
$aMailbox;
* The following sections display the attachment in different
* ways depending on how they choose. The first way will download
* under any circumstance. This sets the Content-type to be
* applicatin/octet-stream, which should be interpreted by the
* browser as "download me".
* The second method (view) is used for images or other formats
* that should be able to be handled by the browser. It will
* most likely display the attachment inline inside the browser.
* And finally, the third one will be used by default. If it
* is displayable (text or html), it will load them up in a text
* viewer (built in to SquirrelMail). Otherwise, it sets the
* content-type as application/octet-stream
if (isset
($absolute_dl) &&
$absolute_dl) {
/* be aware that any warning caused by download.php will corrupt the
* attachment in case of ERROR reporting = E_ALL and the output is the screen */
Documentation generated on Mon, 13 Jan 2020 04:22:25 +0100 by phpDocumentor 1.4.3