From eb471134e5f2a31dc18429c86525c6b16daaaea6 Mon Sep 17 00:00:00 2001
From: Peter Rotich <peter@osticket.com>
Date: Sat, 27 Sep 2014 14:42:42 +0000
Subject: [PATCH] bug: Decode mailbox when parsing an email address

This addresses cases where incoming emails doesn't include charset and
mailbox may include non-ascii characters.
---
 include/class.format.php    | 5 +++--
 include/class.mailparse.php | 8 +++++++-
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/include/class.format.php b/include/class.format.php
index 000d771bb..8d302aaa8 100644
--- a/include/class.format.php
+++ b/include/class.format.php
@@ -73,9 +73,10 @@ class Format {
                 $str.= Format::encode($part->text, $part->charset, $encoding);
 
             $text = $str;
-        } elseif(function_exists('iconv_mime_decode')) {
+        } elseif($text[0] == '=' && function_exists('iconv_mime_decode')) {
             $text = iconv_mime_decode($text, 0, $encoding);
-        } elseif(!strcasecmp($encoding, 'utf-8') && function_exists('imap_utf8')) {
+        } elseif(!strcasecmp($encoding, 'utf-8')
+                && function_exists('imap_utf8')) {
             $text = imap_utf8($text);
         }
 
diff --git a/include/class.mailparse.php b/include/class.mailparse.php
index 9c96403e5..fda033658 100644
--- a/include/class.mailparse.php
+++ b/include/class.mailparse.php
@@ -513,12 +513,18 @@ class Mail_Parse {
 
         $parsed = Mail_RFC822::parseAddressList($address, null, null,false);
 
-        if(PEAR::isError($parsed))
+        if (PEAR::isError($parsed))
             return array();
 
+        // Decode name and mailbox
         foreach ($parsed as $p) {
             $p->personal = Format::mimedecode($p->personal, $this->charset);
+            // Some mail clients may send ISO-8859-1 strings without proper encoding.
+            // Also, handle the more sane case where the mailbox is properly encoded
+            // against RFC2047
+            $p->mailbox = Format::mimedecode($p->mailbox, $this->charset);
         }
+
         return $parsed;
     }
 
-- 
GitLab