diff options
author | Aleksander Machniak <alec@alec.pl> | 2013-05-01 11:11:39 +0200 |
---|---|---|
committer | Aleksander Machniak <alec@alec.pl> | 2013-05-01 11:12:12 +0200 |
commit | 283ac978524b62383afaa784c4ec62ca4b96882f (patch) | |
tree | ffce11d52a13b80565f01b4b0d7082726ac6905c | |
parent | 9b82062f5a5e439edd0a7a3b352ce8159b3aa797 (diff) |
Fix Reply-To header handling in Reply-All action (#1489037)
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | program/lib/Roundcube/rcube_mime.php | 34 | ||||
-rw-r--r-- | program/steps/mail/compose.inc | 11 |
3 files changed, 30 insertions, 16 deletions
@@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- Fix Reply-To header handling in Reply-All action (#1489037) - Fix so Sender: address is added to Cc: field on reply to all (#1489011) - Fix so addressbook_search_mode works also for group search (#1489079) - Fix removal of a contact from a group in LDAP addressbook (#1489081) diff --git a/program/lib/Roundcube/rcube_mime.php b/program/lib/Roundcube/rcube_mime.php index 96296a57c..0a4bfbddb 100644 --- a/program/lib/Roundcube/rcube_mime.php +++ b/program/lib/Roundcube/rcube_mime.php @@ -127,10 +127,11 @@ class rcube_mime * @param int $max List only this number of addresses * @param boolean $decode Decode address strings * @param string $fallback Fallback charset if none specified + * @param boolean $addronly Return flat array with e-mail addresses only * - * @return array Indexed list of addresses + * @return array Indexed list of addresses */ - static function decode_address_list($input, $max = null, $decode = true, $fallback = null) + static function decode_address_list($input, $max = null, $decode = true, $fallback = null, $addronly = false) { $a = self::parse_address_list($input, $decode, $fallback); $out = array(); @@ -145,20 +146,21 @@ class rcube_mime foreach ($a as $val) { $j++; $address = trim($val['address']); - $name = trim($val['name']); - - if ($name && $address && $name != $address) - $string = sprintf('%s <%s>', preg_match("/$special_chars/", $name) ? '"'.addcslashes($name, '"').'"' : $name, $address); - else if ($address) - $string = $address; - else if ($name) - $string = $name; - - $out[$j] = array( - 'name' => $name, - 'mailto' => $address, - 'string' => $string - ); + + if ($addronly) { + $out[$j] = $address; + } + else { + $name = trim($val['name']); + if ($name && $address && $name != $address) + $string = sprintf('%s <%s>', preg_match("/$special_chars/", $name) ? '"'.addcslashes($name, '"').'"' : $name, $address); + else if ($address) + $string = $address; + else if ($name) + $string = $name; + + $out[$j] = array('name' => $name, 'mailto' => $address, 'string' => $string); + } if ($max && $j==$max) break; diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index b0591d085..dae1d43e5 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -320,6 +320,17 @@ foreach ($parts as $header) { $fvalue .= (!empty($fvalue) ? $separator : '') . $v; if ($v = $MESSAGE->headers->get('Sender', false)) $fvalue .= (!empty($fvalue) ? $separator : '') . $v; + + // 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); + + if (count($replyto) && !count(array_diff($to, $replyto)) && count(array_diff($from, $to))) { + $fvalue .= (!empty($fvalue) ? $separator : '') . $v; + } + } } } else if (in_array($compose_mode, array(RCUBE_COMPOSE_DRAFT, RCUBE_COMPOSE_EDIT))) { |