Просмотр исходного кода

address parsing with encoded personal names

stekkel 22 лет назад
Родитель
Сommit
b01c4f87da
2 измененных файлов с 8 добавлено и 3 удалено
  1. 1 1
      class/mime/AddressStructure.class.php
  2. 7 2
      class/mime/Rfc822Header.class.php

+ 1 - 1
class/mime/AddressStructure.class.php

@@ -25,7 +25,7 @@ class AddressStructure {
                                   : $this->mailbox);
                                   : $this->mailbox);
             $personal = trim($this->personal);
             $personal = trim($this->personal);
             $is_encoded = false;
             $is_encoded = false;
-            if (preg_match('/^(=\?([^?]*)\?(Q|B)\?([^?]*)\?=)(.*)/Ui',$personal,$reg)) {
+            if (preg_match('/(=\?([^?]*)\?(Q|B)\?([^?]*)\?=)(.*)/Ui',$personal,$reg)) {
                 $is_encoded = true;
                 $is_encoded = true;
             }
             }
             if ($personal) {
             if ($personal) {

+ 7 - 2
class/mime/Rfc822Header.class.php

@@ -260,8 +260,9 @@ class Rfc822Header {
                 if (preg_match('/^(=\?([^?]*)\?(Q|B)\?([^?]*)\?=)(.*)/Ui',substr($address,$pos),$reg)) {
                 if (preg_match('/^(=\?([^?]*)\?(Q|B)\?([^?]*)\?=)(.*)/Ui',substr($address,$pos),$reg)) {
                     $name .= $reg[1];
                     $name .= $reg[1];
                     $pos += strlen($reg[1]);
                     $pos += strlen($reg[1]);
+                } else {
+                    ++$pos;
                 }
                 }
-                ++$pos;
                 $addr_start = $pos;
                 $addr_start = $pos;
                 $is_encoded = true;
                 $is_encoded = true;
                 break;
                 break;
@@ -460,7 +461,11 @@ class Rfc822Header {
         } else if ($name == '') {
         } else if ($name == '') {
             $name = trim(substr($address, 0, $addr_start));
             $name = trim(substr($address, 0, $addr_start));
         }
         }
-        if (!$name && $comment) $name = $comment;
+        if (!$name && $comment) {
+            $name = $comment;
+        } else if ($name && $comment) {
+            $name = $name .' ('.$comment.')';
+        }
         $at = strpos($addr, '@');
         $at = strpos($addr, '@');
         $addr_structure = new AddressStructure();
         $addr_structure = new AddressStructure();
         $addr_structure->group = $group;
         $addr_structure->group = $group;