From: Michael M Slusarz Date: Fri, 12 Dec 2008 20:08:29 +0000 (-0700) Subject: Improved algorithm for building reply addresses X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=73368388d10d521d73936d259787fe28f2a67aa6;p=horde.git Improved algorithm for building reply addresses --- diff --git a/imp/lib/Compose.php b/imp/lib/Compose.php index 680974bf5..653bdbb59 100644 --- a/imp/lib/Compose.php +++ b/imp/lib/Compose.php @@ -1178,33 +1178,49 @@ class IMP_Compose /* Filter out our own address from the addresses we reply to. */ require_once 'Horde/Identity.php'; $identity = &Identity::singleton(array('imp', 'imp')); - $me = array_keys($identity->getAllFromAddresses(true)); - - /* Build the To: header. */ - $from_arr = $h->getOb('from'); - $to_arr = $h->getOb('reply-to'); - $reply = ''; - - if (!empty($to_arr)) { - $reply = Horde_Mime_Address::addrArray2String($to_arr); - } elseif (!empty($from_arr)) { - $reply = Horde_Mime_Address::addrArray2String($from_arr); + $all_addrs = array_keys($identity->getAllFromAddresses(true)); + + /* Build the To: header. It is either 1) the Reply-To address + * (if not a personal address), 2) the From address (if not a + * personal address), or 3) all remaining Cc addresses. */ + $cc_addrs = array(); + foreach (array('reply-to', 'from', 'to', 'cc') as $val) { + $ob = $h->getOb($val); + if (!empty($ob)) { + $addr_obs = Horde_Mime_Address::getAddressesFromObject($ob, $all_addrs); + if (!empty($addr_obs)) { + if (isset($addr_obs[0]['groupname'])) { + $cc_addrs = array_merge($cc_addrs, $addr_obs); + foreach ($addr_obs[0]['addresses'] as $addr_ob) { + $all_addrs[] = $addr_ob['inner']; + } + } else { + if ($val == 'reply-to') { + $header['to'] = $addr_obs[0]['address']; + } else { + $cc_addrs = array_merge($cc_addrs, $addr_obs); + } + foreach ($addr_obs as $addr_ob) { + $all_addrs[] = $addr_ob['inner']; + } + } + } + } } - $header['to'] = Horde_Mime_Address::addrArray2String(array_merge($to_arr, $from_arr), $me); - - /* Build the Cc: header. */ - $cc_arr = $h->getOb('to'); - if (!empty($cc_arr) && - ($reply != Horde_Mime_Address::addrArray2String($cc_arr))) { - $cc_arr = array_merge($cc_arr, $h->getOb('cc')); - } else { - $cc_arr = $h->getOb('cc'); + /* Build the Cc: (or possibly the To:) header. */ + $hdr_cc = array(); + foreach ($cc_addrs as $ob) { + if (isset($ob['groupname'])) { + $hdr_cc[] = Horde_Mime_Address::writeGroupAddress($ob['groupname'], $ob['addresses']) . ' '; + } else { + $hdr_cc[] = $ob['address'] . ', '; + } } - $header['cc'] = Horde_Mime_Address::addrArray2String($cc_arr, $me); + $header[isset($header['to']) ? 'cc' : 'to'] = rtrim(implode('', $hdr_cc), ' ,'); /* Build the Bcc: header. */ - $header['bcc'] = Horde_Mime_Address::addrArray2String($h->getOb('bcc') + $identity->getBccAddresses(), $me); + $header['bcc'] = Horde_Mime_Address::addrArray2String($h->getOb('bcc') + $identity->getBccAddresses(), $all_addrs); if ($actionID == '*') { $all_headers['reply_all'] = $header; }