From a26430e3bdc15c31294511ff2dd5cd5ad8f8968f Mon Sep 17 00:00:00 2001 From: Michael M Slusarz Date: Thu, 5 Feb 2009 23:33:07 -0700 Subject: [PATCH] Bug #7938: Fix group address parsing. --- framework/Mime/lib/Horde/Mime.php | 26 +++++++++++++++++--------- framework/Mime/lib/Horde/Mime/Address.php | 8 +++++++- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/framework/Mime/lib/Horde/Mime.php b/framework/Mime/lib/Horde/Mime.php index a0dcfa062..fd78348a0 100644 --- a/framework/Mime/lib/Horde/Mime.php +++ b/framework/Mime/lib/Horde/Mime.php @@ -208,20 +208,28 @@ class Horde_Mime $text = ''; foreach ($addresses as $addr) { - // Check for groups. - if (empty($addr['groupname'])) { - if (empty($addr['personal'])) { + $addrobs = empty($addr['groupname']) + ? array($addr) + : $addr['addresses']; + $addrlist = array(); + + foreach ($addrobs as $val) { + if (empty($val['personal'])) { $personal = ''; } else { - if (($addr['personal'][0] == '"') && - (substr($addr['personal'], -1) == '"')) { - $addr['personal'] = stripslashes(substr($addr['personal'], 1, -1)); + if (($val['personal'][0] == '"') && + (substr($val['personal'], -1) == '"')) { + $addr['personal'] = stripslashes(substr($val['personal'], 1, -1)); } - $personal = self::encode($addr['personal'], $charset); + $personal = self::encode($val['personal'], $charset); } - $text .= Horde_Mime_Address::writeAddress($addr['mailbox'], $addr['host'], $personal) . ', '; + $addrlist[] = Horde_Mime_Address::writeAddress($val['mailbox'], $val['host'], $personal); + } + + if (empty($addr['groupname'])) { + $text .= reset($addrlist) . ', '; } else { - $text .= Horde_Mime_Address::writeGroupAddress($addr['groupname'], $addr['addresses']) . ' '; + $text .= Horde_Mime_Address::writeGroupAddress($addr['groupname'], $addrlist) . ' '; } } diff --git a/framework/Mime/lib/Horde/Mime/Address.php b/framework/Mime/lib/Horde/Mime/Address.php index 08dd3c6f4..7ce620f79 100644 --- a/framework/Mime/lib/Horde/Mime/Address.php +++ b/framework/Mime/lib/Horde/Mime/Address.php @@ -68,7 +68,7 @@ class Horde_Mime_Address */ static public function writeGroupAddress($groupname, $addresses = array()) { - return self::encode($groupname, 'address') . ':' . (empty($addresses) ? '' : implode(', ', $addresses)) . ';'; + return self::encode($groupname, 'address') . ':' . (empty($addresses) ? '' : (' ' . implode(', ', $addresses)) . ';'); } /** @@ -397,6 +397,12 @@ class Horde_Mime_Address /* Convert objects to arrays. */ foreach (array_keys($ret) as $key) { $ret[$key] = (array) $ret[$key]; + if (isset($ret[$key]['addresses'])) { + $ptr = &$ret[$key]['addresses']; + foreach (array_keys($ptr) as $key2) { + $ptr[$key2] = (array) $ptr[$key2]; + } + } } return $ret; -- 2.11.0