Browse Source

Fix for addressbook entries containing multiple email addresses (group)
This should solve the send error after compose.

stekkel 22 years ago
parent
commit
5387c61b4e
1 changed files with 27 additions and 15 deletions
  1. 27 15
      class/mime/Rfc822Header.class.php

+ 27 - 15
class/mime/Rfc822Header.class.php

@@ -332,6 +332,7 @@ class Rfc822Header {
                 }
                 }
                 $is_encoded = false;
                 $is_encoded = false;
                 $addr_structure->group = $group;
                 $addr_structure->group = $group;
+                $grouplookup = false;
                 if ($at) {
                 if ($at) {
                     $addr_structure->mailbox = substr($addr, 0, $at);
                     $addr_structure->mailbox = substr($addr, 0, $at);
                     $addr_structure->host = substr($addr, $at+1);
                     $addr_structure->host = substr($addr, $at+1);
@@ -340,17 +341,22 @@ class Rfc822Header {
                     if ($lookup) {
                     if ($lookup) {
                         $aAddr = call_user_func_array($lookup,array($addr));
                         $aAddr = call_user_func_array($lookup,array($addr));
                         if (isset($aAddr['email'])) {
                         if (isset($aAddr['email'])) {
-                            $at = strpos($aAddr['email'], '@');
-                            $addr_structure->mailbox = substr($aAddr['email'], 0, $at);
-                            $addr_structure->host = substr($aAddr['email'], $at+1);
-                            if (isset($aAddr['name'])) {
-                                $addr_structure->personal = $aAddr['name'];
+                            if (strpos($aAddr['email'],',')) {
+                                $grouplookup = true;
+                                $addr_ar = $this->parseAddress($aAddr['email'], $ar, $addr_ar, $group, $host,$lookup);
                             } else {
                             } else {
-                                $addr_structure->personal = encodeHeader($addr);
+                                $at = strpos($aAddr['email'], '@');
+                                $addr_structure->mailbox = substr($aAddr['email'], 0, $at);
+                                $addr_structure->host = substr($aAddr['email'], $at+1);
+                                if (isset($aAddr['name'])) {
+                                    $addr_structure->personal = $aAddr['name'];
+                                } else {
+                                    $addr_structure->personal = encodeHeader($addr);
+                                }
                             }
                             }
                         }
                         }
                     }
                     }
-                    if (!$addr_structure->mailbox) {
+                    if (!$grouplookup && !$addr_structure->mailbox) {
                         $addr_structure->mailbox = trim($addr);
                         $addr_structure->mailbox = trim($addr);
                         if ($host) {
                         if ($host) {
                             $addr_structure->host = $host;
                             $addr_structure->host = $host;
@@ -362,13 +368,15 @@ class Rfc822Header {
                 $pos = 0;
                 $pos = 0;
                 $name = '';
                 $name = '';
                 $addr = '';
                 $addr = '';
-                $addr_ar[] = $addr_structure;
+                if (!$grouplookup) {
+                    $addr_ar[] = $addr_structure;
+                }
                 break;
                 break;
             case ':':  /* process the group addresses */
             case ':':  /* process the group addresses */
                 /* group marker */
                 /* group marker */
                 $group = substr($address, 0, $pos);
                 $group = substr($address, 0, $pos);
                 $address = substr($address, $pos+1);
                 $address = substr($address, $pos+1);
-                $result = $this->parseAddress($address, $ar, $addr_ar, $group);
+                $result = $this->parseAddress($address, $ar, $addr_ar, $group, $lookup);
                 $addr_ar = $result[0];
                 $addr_ar = $result[0];
                 $pos = $result[1];
                 $pos = $result[1];
                 $address = substr($address, $pos++);
                 $address = substr($address, $pos++);
@@ -477,13 +485,17 @@ class Rfc822Header {
             if ($lookup) {
             if ($lookup) {
                 $aAddr = call_user_func_array($lookup,array($addr));
                 $aAddr = call_user_func_array($lookup,array($addr));
                 if (isset($aAddr['email'])) {
                 if (isset($aAddr['email'])) {
-                    $at = strpos($aAddr['email'], '@');
-                    $addr_structure->mailbox = substr($aAddr['email'], 0, $at);
-                    $addr_structure->host = substr($aAddr['email'], $at+1);
-                    if (isset($aAddr['name']) && $aAddr['name']) {
-                        $name = $aAddr['name'];
+                    if (strpos($aAddr['email'],',')) {
+                        return $this->parseAddress($aAddr['email'], $ar, $addr_ar, $group, $host,$lookup);
                     } else {
                     } else {
-                        $name = $addr;
+                        $at = strpos($aAddr['email'], '@');
+                        $addr_structure->mailbox = substr($aAddr['email'], 0, $at);
+                        $addr_structure->host = substr($aAddr['email'], $at+1);
+                        if (isset($aAddr['name']) && $aAddr['name']) {
+                            $name = $aAddr['name'];
+                        } else {
+                            $name = $addr;
+                        }
                     }
                     }
                 }
                 }
             }
             }