| | |
| | | foreach ($parts as $header) { |
| | | $fvalue = ''; |
| | | $decode_header = true; |
| | | $charset = $MESSAGE->headers->charset; |
| | | |
| | | // we have a set of recipients stored is session |
| | | if ($header == 'to' && ($mailto_id = $COMPOSE['param']['mailto']) |
| | |
| | | ) { |
| | | $fvalue = urldecode($_SESSION['mailto'][$mailto_id]); |
| | | $decode_header = false; |
| | | $charset = $RCMAIL->output->charset; |
| | | |
| | | // make session to not grow up too much |
| | | unset($_SESSION['mailto'][$mailto_id]); |
| | | $COMPOSE['param']['to'] = $fvalue; |
| | | } |
| | | else if (!empty($_POST['_'.$header])) { |
| | | $fvalue = rcube_utils::get_input_value('_'.$header, rcube_utils::INPUT_POST, TRUE); |
| | | $fvalue = rcube_utils::get_input_value('_'.$header, rcube_utils::INPUT_POST, TRUE); |
| | | $charset = $RCMAIL->output->charset; |
| | | } |
| | | else if (!empty($COMPOSE['param'][$header])) { |
| | | $fvalue = $COMPOSE['param'][$header]; |
| | | $fvalue = $COMPOSE['param'][$header]; |
| | | $charset = $RCMAIL->output->charset; |
| | | } |
| | | else if ($compose_mode == RCUBE_COMPOSE_REPLY) { |
| | | // get recipent address(es) out of the message headers |
| | |
| | | |
| | | // When To: and Reply-To: are the same we add From: address to the list (#1489037) |
| | | if ($v = $MESSAGE->headers->from) { |
| | | $from = rcube_mime::decode_address_list($v, null, false, $MESSAGE->headers->charset, true); |
| | | $to = rcube_mime::decode_address_list($MESSAGE->headers->to, null, false, $MESSAGE->headers->charset, true); |
| | | $replyto = rcube_mime::decode_address_list($MESSAGE->headers->replyto, null, false, $MESSAGE->headers->charset, true); |
| | | $from = rcube_mime::decode_address_list($v, null, false, $charset, true); |
| | | $to = rcube_mime::decode_address_list($MESSAGE->headers->to, null, false, $charset, true); |
| | | $replyto = rcube_mime::decode_address_list($MESSAGE->headers->replyto, null, false, $charset, true); |
| | | |
| | | if (count($replyto) && !count(array_diff($to, $replyto)) && count(array_diff($from, $to))) { |
| | | $fvalue .= (!empty($fvalue) ? $separator : '') . $v; |
| | |
| | | |
| | | // split recipients and put them back together in a unique way |
| | | if (!empty($fvalue) && in_array($header, array('to', 'cc', 'bcc'))) { |
| | | $to_addresses = rcube_mime::decode_address_list($fvalue, null, $decode_header, $MESSAGE->headers->charset); |
| | | $to_addresses = rcube_mime::decode_address_list($fvalue, null, $decode_header, $charset); |
| | | $fvalue = array(); |
| | | |
| | | foreach ($to_addresses as $addr_part) { |
| | |
| | | |
| | | // #1486037: remove "mailto:" prefix |
| | | $COMPOSE['param']['to'] = preg_replace('/^mailto:/i', '', $mailto[0]); |
| | | // #1490346: decode the recipient address |
| | | // #1490510: use raw encoding for correct "+" character handling as specified in RFC6068 |
| | | $COMPOSE['param']['to'] = rawurldecode($COMPOSE['param']['to']); |
| | | |
| | | // Supported case-insensitive tokens in mailto URL |
| | | $url_tokens = array('to', 'cc', 'bcc', 'reply-to', 'in-reply-to', 'references', 'subject', 'body'); |
| | |
| | | |
| | | if (!empty($MESSAGE->parts)) { |
| | | // collect IDs of message/rfc822 parts |
| | | if ($compose_mode == RCUBE_COMPOSE_EDIT || $compose_mode == RCUBE_COMPOSE_DRAFT) { |
| | | foreach ($MESSAGE->attachments as $part) { |
| | | if ($part->mimetype == 'message/rfc822') { |
| | | $messages[] = $part->mime_id; |
| | | } |
| | | foreach ($MESSAGE->mime_parts as $part) { |
| | | if ($part->mimetype == 'message/rfc822') { |
| | | $messages[] = $part->mime_id; |
| | | } |
| | | } |
| | | |
| | |
| | | continue; |
| | | } |
| | | |
| | | // skip all content parts inside the message/rfc822 part in DRAFT/EDIT mode |
| | | // skip all content parts inside the message/rfc822 part |
| | | foreach ($messages as $mimeid) { |
| | | if (strpos($part->mime_id, $mimeid . '.') === 0) { |
| | | continue 2; |
| | |
| | | ) |
| | | )); |
| | | |
| | | $reply_mode = intval($RCMAIL->config->get('reply_mode')); |
| | | |
| | | if (!$bodyIsHtml) { |
| | | $body = preg_replace('/\r?\n/', "\n", $body); |
| | | $body = trim($body, "\n"); |
| | |
| | | $body = rcmail_wrap_and_quote($body, $LINE_LENGTH); |
| | | |
| | | $prefix .= "\n"; |
| | | $suffix = ''; |
| | | |
| | | if (intval($RCMAIL->config->get('reply_mode')) > 0) { // top-posting |
| | | if ($reply_mode > 0) { // top-posting |
| | | $prefix = "\n\n\n" . $prefix; |
| | | $suffix = ''; |
| | | } |
| | | else { |
| | | $suffix = "\n"; |
| | | } |
| | | } |
| | | else { |
| | |
| | | $prefix = '<p>' . rcube::Q($prefix) . "</p>\n"; |
| | | $prefix .= '<blockquote>'; |
| | | |
| | | if (intval($RCMAIL->config->get('reply_mode')) > 0) { // top-posting |
| | | if ($reply_mode > 0) { // top-posting |
| | | $prefix = '<br>' . $prefix; |
| | | $suffix = '</blockquote>'; |
| | | } |
| | |
| | | $messages = array(); |
| | | |
| | | foreach ((array)$message->mime_parts as $pid => $part) { |
| | | if ($part->mimetype == 'message/rfc822') { |
| | | $messages[] = $part->mime_id; |
| | | } |
| | | |
| | | if ($part->disposition == 'attachment' || ($part->disposition == 'inline' && $bodyIsHtml) || $part->filename) { |
| | | // skip parts that aren't valid attachments |
| | | if ($part->ctype_primary == 'multipart' || $part->mimetype == 'application/ms-tnef') { |
| | |
| | | continue; |
| | | } |
| | | |
| | | // skip message/rfc822 attachments on forwards (#1489214) |
| | | // Thunderbird when forwarding in inline mode displays such attachments |
| | | // and skips any attachments from inside of such part, this however |
| | | // skipped e.g. images used in HTML body or other attachments. So, |
| | | // better to skip .eml attachments but not their content (included files). |
| | | if ($part->mimetype == 'message/rfc822') { |
| | | if ($compose_mode == RCUBE_COMPOSE_FORWARD) { |
| | | continue; |
| | | } |
| | | $messages[] = $part->mime_id; |
| | | } |
| | | else if ($compose_mode != RCUBE_COMPOSE_FORWARD) { |
| | | // skip attachments included in message/rfc822 attachment (#1486487) |
| | | foreach ($messages as $mimeid) { |
| | | if (strpos($part->mime_id, $mimeid . '.') === 0) { |
| | | continue 2; |
| | | } |
| | | // skip attachments included in message/rfc822 attachment (#1486487, #1490607) |
| | | foreach ($messages as $mimeid) { |
| | | if (strpos($part->mime_id, $mimeid . '.') === 0) { |
| | | continue 2; |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | global $RCMAIL, $COMPOSE; |
| | | |
| | | $cid_map = array(); |
| | | $cid_map = array(); |
| | | $messages = array(); |
| | | |
| | | foreach ((array)$message->mime_parts as $pid => $part) { |
| | | if ($part->mimetype == 'message/rfc822') { |
| | | $messages[] = $part->mime_id; |
| | | } |
| | | |
| | | if (($part->content_id || $part->content_location) && $part->filename) { |
| | | // skip attachments included in message/rfc822 attachment (#1486487, #1490607) |
| | | foreach ($messages as $mimeid) { |
| | | if (strpos($part->mime_id, $mimeid . '.') === 0) { |
| | | continue 2; |
| | | } |
| | | } |
| | | |
| | | if ($attachment = rcmail_save_attachment($message, $pid)) { |
| | | $COMPOSE['attachments'][$attachment['id']] = $attachment; |
| | | $url = sprintf('%s&_id=%s&_action=display-attachment&_file=rcmfile%s', |