|
|
|
@ -214,6 +214,9 @@ if (!empty($msg_uid))
|
|
|
|
|
{
|
|
|
|
|
$_SESSION['compose']['forward_uid'] = $msg_uid;
|
|
|
|
|
$OUTPUT->set_env('compose_mode', 'forward');
|
|
|
|
|
|
|
|
|
|
if (!empty($_SESSION['compose']['param']['attachment']))
|
|
|
|
|
$MESSAGE->forward_attachment = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -560,6 +563,13 @@ function rcmail_prepare_message_body()
|
|
|
|
|
$body = $_SESSION['compose']['param']['body'];
|
|
|
|
|
$isHtml = false;
|
|
|
|
|
}
|
|
|
|
|
// forward as attachment
|
|
|
|
|
else if ($compose_mode == RCUBE_COMPOSE_FORWARD && $MESSAGE->forward_attachment) {
|
|
|
|
|
$isHtml = rcmail_compose_editor_mode();
|
|
|
|
|
$body = '';
|
|
|
|
|
if (empty($_SESSION['compose']['attachments']))
|
|
|
|
|
rcmail_write_forward_attachment($MESSAGE);
|
|
|
|
|
}
|
|
|
|
|
// reply/edit/draft/forward
|
|
|
|
|
else if ($compose_mode) {
|
|
|
|
|
$has_html_part = $MESSAGE->has_html_part();
|
|
|
|
@ -960,8 +970,61 @@ function rcmail_write_inline_attachments(&$message)
|
|
|
|
|
return $cid_map;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Creates an attachment from the forwarded message
|
|
|
|
|
function rcmail_write_forward_attachment(&$message)
|
|
|
|
|
{
|
|
|
|
|
global $RCMAIL;
|
|
|
|
|
|
|
|
|
|
if (strlen($message->subject)) {
|
|
|
|
|
$name = mb_substr($message->subject, 0, 64) . '.eml';
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
$name = 'message_rfc822.eml';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$mem_limit = parse_bytes(ini_get('memory_limit'));
|
|
|
|
|
$curr_mem = function_exists('memory_get_usage') ? memory_get_usage() : 16*1024*1024; // safe value: 16MB
|
|
|
|
|
$data = $path = null;
|
|
|
|
|
|
|
|
|
|
// don't load too big attachments into memory
|
|
|
|
|
if ($mem_limit > 0 && $message->size > $mem_limit - $curr_mem) {
|
|
|
|
|
$temp_dir = unslashify($RCMAIL->config->get('temp_dir'));
|
|
|
|
|
$path = tempnam($temp_dir, 'rcmAttmnt');
|
|
|
|
|
if ($fp = fopen($path, 'w')) {
|
|
|
|
|
$RCMAIL->imap->get_raw_body($message->uid, $fp);
|
|
|
|
|
fclose($fp);
|
|
|
|
|
} else
|
|
|
|
|
return false;
|
|
|
|
|
} else {
|
|
|
|
|
$data = $RCMAIL->imap->get_raw_body($message->uid);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$attachment = array(
|
|
|
|
|
'group' => $_SESSION['compose']['id'],
|
|
|
|
|
'name' => $name,
|
|
|
|
|
'mimetype' => 'message/rfc822',
|
|
|
|
|
'data' => $data,
|
|
|
|
|
'path' => $path,
|
|
|
|
|
'size' => $path ? filesize($path) : strlen($data),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$attachment = $RCMAIL->plugins->exec_hook('attachment_save', $attachment);
|
|
|
|
|
|
|
|
|
|
if ($attachment['status']) {
|
|
|
|
|
unset($attachment['data'], $attachment['status'], $attachment['content_id'], $attachment['abort']);
|
|
|
|
|
$_SESSION['compose']['attachments'][$attachment['id']] = $attachment;
|
|
|
|
|
return true;
|
|
|
|
|
} else if ($path) {
|
|
|
|
|
@unlink($path);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function rcmail_save_attachment(&$message, $pid)
|
|
|
|
|
{
|
|
|
|
|
$rcmail = rcmail::get_instance();
|
|
|
|
|
$part = $message->mime_parts[$pid];
|
|
|
|
|
$mem_limit = parse_bytes(ini_get('memory_limit'));
|
|
|
|
|
$curr_mem = function_exists('memory_get_usage') ? memory_get_usage() : 16*1024*1024; // safe value: 16MB
|
|
|
|
@ -969,7 +1032,6 @@ function rcmail_save_attachment(&$message, $pid)
|
|
|
|
|
|
|
|
|
|
// don't load too big attachments into memory
|
|
|
|
|
if ($mem_limit > 0 && $part->size > $mem_limit - $curr_mem) {
|
|
|
|
|
$rcmail = rcmail::get_instance();
|
|
|
|
|
$temp_dir = unslashify($rcmail->config->get('temp_dir'));
|
|
|
|
|
$path = tempnam($temp_dir, 'rcmAttmnt');
|
|
|
|
|
if ($fp = fopen($path, 'w')) {
|
|
|
|
@ -991,7 +1053,7 @@ function rcmail_save_attachment(&$message, $pid)
|
|
|
|
|
'size' => $path ? filesize($path) : strlen($data),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$attachment = rcmail::get_instance()->plugins->exec_hook('attachment_save', $attachment);
|
|
|
|
|
$attachment = $rcmail->plugins->exec_hook('attachment_save', $attachment);
|
|
|
|
|
|
|
|
|
|
if ($attachment['status']) {
|
|
|
|
|
unset($attachment['data'], $attachment['status'], $attachment['content_id'], $attachment['abort']);
|
|
|
|
|