Author: dr
Date: Tue Jan 15 14:15:02 2008
New Revision: 7149

Log:
- Fixed issue #12372: MTA transport does not encode subject.

Modified:
    trunk/Mail/ChangeLog
    trunk/Mail/src/interfaces/part.php
    trunk/Mail/tests/transports/transport_mta_test.php

Modified: trunk/Mail/ChangeLog
==============================================================================
--- trunk/Mail/ChangeLog [iso-8859-1] (original)
+++ trunk/Mail/ChangeLog [iso-8859-1] Tue Jan 15 14:15:02 2008
@@ -1,3 +1,9 @@
+1.4.2 - [RELEASEDATE]
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+- Fixed issue #12372: MTA transport does not encode subject.
+
+
 1.4.1 - Monday 14 January 2008
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 

Modified: trunk/Mail/src/interfaces/part.php
==============================================================================
--- trunk/Mail/src/interfaces/part.php [iso-8859-1] (original)
+++ trunk/Mail/src/interfaces/part.php [iso-8859-1] Tue Jan 15 14:15:02 2008
@@ -313,45 +313,48 @@
         $text = "";
         foreach ( $this->headers->getCaseSensitiveArray() as $header => $value 
)
         {
-            if ( in_array( strtolower( $header ), $this->excludeHeaders ) === 
false )
-            {
-                $charset = $this->getHeaderCharset( $header );
-                switch ( strtolower( $charset ) )
-                {
-                    case 'us-ascii':
+            // here we encode every header, even the ones that we don't add to
+            // the header set directly. We do that so that transports sill see
+            // all the encoded headers which they then can use accordingly.
+            $charset = $this->getHeaderCharset( $header );
+            switch ( strtolower( $charset ) )
+            {
+                case 'us-ascii':
+                    $value = ezcMailHeaderFolder::foldAny( $value );
+                    break;
+
+                case 'iso-8859-1': case 'iso-8859-2': case 'iso-8859-3': case 
'iso-8859-4':
+                case 'iso-8859-5': case 'iso-8859-6': case 'iso-8859-7': case 
'iso-8859-8':
+                case 'iso-8859-9': case 'iso-8859-10': case 'iso-8859-11': 
case 'iso-8859-12':
+                case 'iso-8859-13': case 'iso-8859-14': case 'iso-8859-15' 
:case 'iso-8859-16':
+                case 'windows-1250': case 'windows-1251': case 'windows-1252':
+                case 'utf-8':
+                    if ( strpbrk( $value, 
"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
 ) === false )
+                    {
                         $value = ezcMailHeaderFolder::foldAny( $value );
                         break;
-
-                    case 'iso-8859-1': case 'iso-8859-2': case 'iso-8859-3': 
case 'iso-8859-4':
-                    case 'iso-8859-5': case 'iso-8859-6': case 'iso-8859-7': 
case 'iso-8859-8':
-                    case 'iso-8859-9': case 'iso-8859-10': case 'iso-8859-11': 
case 'iso-8859-12':
-                    case 'iso-8859-13': case 'iso-8859-14': case 'iso-8859-15' 
:case 'iso-8859-16':
-                    case 'windows-1250': case 'windows-1251': case 
'windows-1252':
-                    case 'utf-8':
-                        if ( strpbrk( $value, 
"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
 ) === false )
-                        {
-                            $value = ezcMailHeaderFolder::foldAny( $value );
-                            break;
-                        }
-                        // break intentionally missing
-
-                    default:
-                        $preferences = array(
-                            'input-charset' => $charset,
-                            'output-charset' => $charset,
-                            'line-length' => ezcMailHeaderFolder::getLimit(),
-                            'scheme' => 'Q',
-                            'line-break-chars' => ezcMailTools::lineBreak()
-                        );
-                        $value = iconv_mime_encode( 'dummy', $value, 
$preferences );
-                        $value = substr( $value, 7 ); // "dummy: " + 1
-
-                        // just to keep compatibility with code which might 
read
-                        // the headers after generateHeaders() has been called
-                        $this->setHeader( $header, $value, $charset );
-                        break;
-                }
-
+                    }
+                    // break intentionally missing
+
+                default:
+                    $preferences = array(
+                        'input-charset' => $charset,
+                        'output-charset' => $charset,
+                        'line-length' => ezcMailHeaderFolder::getLimit(),
+                        'scheme' => 'Q',
+                        'line-break-chars' => ezcMailTools::lineBreak()
+                    );
+                    $value = iconv_mime_encode( 'dummy', $value, $preferences 
);
+                    $value = substr( $value, 7 ); // "dummy: " + 1
+
+                    // just to keep compatibility with code which might read
+                    // the headers after generateHeaders() has been called
+                    $this->setHeader( $header, $value, $charset );
+                    break;
+            }
+
+            if ( in_array( strtolower( $header ), $this->excludeHeaders ) === 
false )
+            {
                 $text .= "$header: $value" . ezcMailTools::lineBreak();
             }
         }

Modified: trunk/Mail/tests/transports/transport_mta_test.php
==============================================================================
--- trunk/Mail/tests/transports/transport_mta_test.php [iso-8859-1] (original)
+++ trunk/Mail/tests/transports/transport_mta_test.php [iso-8859-1] Tue Jan 15 
14:15:02 2008
@@ -105,6 +105,20 @@
         }
     }
 
+    // Test with utf8 chars in to/from and subject
+    public function testEncodedHeaders()
+    {
+        $m = new ezcMailComposer;
+        $m->from = new ezcMailAddress( '[EMAIL PROTECTED]', 'Frøya', 'utf-8' 
);
+        $m->addTo( new ezcMailAddress( '[EMAIL PROTECTED]', 'Óðinn', 'utf-8' 
) );
+        $m->subject = "Blót";
+        $m->subjectCharset = 'utf-8';
+
+        $this->transport->send( $m );
+
+        $this->assertEquals( "=?utf-8?Q?Bl=C3=B3t?=", $m->getHeader( 'Subject' 
) );
+    }
+
     public static function suite()
     {
          return new PHPUnit_Framework_TestSuite( "ezcMailTransportMtaTest" );


-- 
svn-components mailing list
svn-components@lists.ez.no
http://lists.ez.no/mailman/listinfo/svn-components

Reply via email to