Author: Derick Rethans
Date: 2006-01-26 14:19:19 +0100 (Thu, 26 Jan 2006)
New Revision: 2040

Log:
- Fixed output encoding of headers and subject. This seems to be a bug in PHP
  which claims that if output-encoding is not set it will use the same as the
  input-encoding. That didn't seem to work as it defaulted to iso-8859-1.
- Added test cases for this issue.

Modified:
   packages/Mail/trunk/src/mail.php
   packages/Mail/trunk/src/tools.php
   packages/Mail/trunk/tests/mail_test.php

Modified: packages/Mail/trunk/src/mail.php
===================================================================
--- packages/Mail/trunk/src/mail.php    2006-01-26 10:53:23 UTC (rev 2039)
+++ packages/Mail/trunk/src/mail.php    2006-01-26 13:19:19 UTC (rev 2040)
@@ -264,10 +264,11 @@
         {
             $preferences = array(
                 'input-charset' => $this->subjectCharset,
+                'output-charset' => $this->subjectCharset,
                 'line-length' => 76,
                 'scheme' => 'B',
                 'line-break-chars' => ezcMailTools::lineBreak()
-                );
+            );
             $subject = iconv_mime_encode( 'dummy', $this->subject, 
$preferences );
             $this->setHeader( 'Subject', substr( $subject, 7 ) ); // "dummy: " 
+ 1
         }

Modified: packages/Mail/trunk/src/tools.php
===================================================================
--- packages/Mail/trunk/src/tools.php   2006-01-26 10:53:23 UTC (rev 2039)
+++ packages/Mail/trunk/src/tools.php   2006-01-26 13:19:19 UTC (rev 2040)
@@ -56,9 +56,10 @@
             if( $item->charset !== 'us-ascii' )
             {
                 $preferences = array(
-                'input-charset' => $item->charset,
-                'scheme' => 'B',
-                'line-break-chars' => ezcMailTools::lineBreak()
+                    'input-charset' => $item->charset,
+                    'output-charset' => $item->charset,
+                    'scheme' => 'B',
+                    'line-break-chars' => ezcMailTools::lineBreak()
                 );
                 $name = iconv_mime_encode( 'dummy', $item->name, $preferences 
);
                 $name = substr( $name, 7 ); // "dummy: " + 1

Modified: packages/Mail/trunk/tests/mail_test.php
===================================================================
--- packages/Mail/trunk/tests/mail_test.php     2006-01-26 10:53:23 UTC (rev 
2039)
+++ packages/Mail/trunk/tests/mail_test.php     2006-01-26 13:19:19 UTC (rev 
2040)
@@ -79,7 +79,7 @@
         $this->mail->from = new ezcMailAddress( '[EMAIL PROTECTED]' );
         $this->mail->addTo( new ezcMailAddress( '[EMAIL PROTECTED]', 'Frederik 
Holljen' ) );
         $this->mail->subject = "Døtte er en test";
-        $this->mail->subjectCharset = 'iso-8859-1';
+        $this->mail->subjectCharset = 'ISO-8859-1';
         $expected = "From: [EMAIL PROTECTED]" . ezcMailTools::lineBreak() .
             "To: Frederik Holljen <[EMAIL PROTECTED]>" . 
ezcMailTools::lineBreak() .
             "Subject: =?ISO-8859-1?B?RPh0dGUgZXIgZW4gdGVzdA==?=" . 
ezcMailTools::lineBreak() .
@@ -95,12 +95,12 @@
 
     public function testHeadersWithCharset()
     {
-        $this->mail->from = new ezcMailAddress( '[EMAIL PROTECTED]', 'Fræderik 
Hølljen', 'iso-8859-1' );
-        $this->mail->addTo( new ezcMailAddress( '[EMAIL PROTECTED]', 'Fræderik 
Hølljen','iso-8859-1' ) );
-        $this->mail->addCc( new ezcMailAddress( '[EMAIL PROTECTED]', 'Fræderik 
Hølljen','iso-8859-1' ) );
-        $this->mail->addBcc( new ezcMailAddress( '[EMAIL PROTECTED]', 
'Fræderik Hølljen','iso-8859-1' ) );
+        $this->mail->from = new ezcMailAddress( '[EMAIL PROTECTED]', 'Fræderik 
Hølljen', 'ISO-8859-1' );
+        $this->mail->addTo( new ezcMailAddress( '[EMAIL PROTECTED]', 'Fræderik 
Hølljen','ISO-8859-1' ) );
+        $this->mail->addCc( new ezcMailAddress( '[EMAIL PROTECTED]', 'Fræderik 
Hølljen','ISO-8859-1' ) );
+        $this->mail->addBcc( new ezcMailAddress( '[EMAIL PROTECTED]', 
'Fræderik Hølljen','ISO-8859-1' ) );
         $this->mail->subject = "Døtte er en test";
-        $this->mail->subjectCharset = 'iso-8859-1';
+        $this->mail->subjectCharset = 'ISO-8859-1';
         $expected = "From: =?ISO-8859-1?B?RnLmZGVyaWsgSPhsbGplbg==?= <[EMAIL 
PROTECTED]>" . ezcMailTools::lineBreak() .
             "To: =?ISO-8859-1?B?RnLmZGVyaWsgSPhsbGplbg==?= <[EMAIL 
PROTECTED]>" . ezcMailTools::lineBreak() .
             "Cc: =?ISO-8859-1?B?RnLmZGVyaWsgSPhsbGplbg==?= <[EMAIL 
PROTECTED]>" . ezcMailTools::lineBreak() .
@@ -115,7 +115,49 @@
 
         $this->assertEquals( $expected, $return );
     }
+    
+    public function testSubjectWithCharsetUtf8()
+    {
+        $this->mail->from = new ezcMailAddress( '[EMAIL PROTECTED]' );
+        $this->mail->addTo( new ezcMailAddress( '[EMAIL PROTECTED]', 'Frederik 
Holljen' ) );
+        $this->mail->subject = "Døtte er en test";
+        $this->mail->subjectCharset = 'ISO-8859-1';
+        $expected = "From: [EMAIL PROTECTED]" . ezcMailTools::lineBreak() .
+            "To: Frederik Holljen <[EMAIL PROTECTED]>" . 
ezcMailTools::lineBreak() .
+            "Subject: =?ISO-8859-1?B?RPh0dGUgZXIgZW4gdGVzdA==?=" . 
ezcMailTools::lineBreak() .
+            "MIME-Version: 1.0" . ezcMailTools::lineBreak() .
+            "User-Agent: eZ components";
 
+        $return = $this->mail->generate();
+        // cut away the Date and Message-ID headers as there is no way to 
predict what they will be
+        $return = join( ezcMailTools::lineBreak(), array_slice( explode( 
ezcMailTools::lineBreak(), $return ), 0, 5 ) );
+
+        $this->assertEquals( $expected, $return );
+    }
+
+    public function testHeadersWithCharsetUtf8()
+    {
+        $this->mail->from = new ezcMailAddress( '[EMAIL PROTECTED]', 
'Fræderik Hølljen', 'UTF-8' );
+        $this->mail->addTo( new ezcMailAddress( '[EMAIL PROTECTED]', 
'Fræderik Hølljen','UTF-8' ) );
+        $this->mail->addCc( new ezcMailAddress( '[EMAIL PROTECTED]', 
'Fræderik Hølljen','UTF-8' ) );
+        $this->mail->addBcc( new ezcMailAddress( '[EMAIL PROTECTED]', 
'Fræderik Hølljen','UTF-8' ) );
+        $this->mail->subject = "Dätte er en test";
+        $this->mail->subjectCharset = 'UTF-8';
+        $expected = "From: =?UTF-8?B?RnLDpmRlcmlrIEjDuGxsamVu?= <[EMAIL 
PROTECTED]>" . ezcMailTools::lineBreak() .
+            "To: =?UTF-8?B?RnLDpmRlcmlrIEjDuGxsamVu?= <[EMAIL PROTECTED]>" . 
ezcMailTools::lineBreak() .
+            "Cc: =?UTF-8?B?RnLDpmRlcmlrIEjDuGxsamVu?= <[EMAIL PROTECTED]>" . 
ezcMailTools::lineBreak() .
+            "Bcc: =?UTF-8?B?RnLDpmRlcmlrIEjDuGxsamVu?= <[EMAIL PROTECTED]>" . 
ezcMailTools::lineBreak() .
+            "Subject: =?UTF-8?B?RMOkdHRlIGVyIGVuIHRlc3Q=?=" . 
ezcMailTools::lineBreak() .
+            "MIME-Version: 1.0" . ezcMailTools::lineBreak() .
+            "User-Agent: eZ components";
+
+        $return = $this->mail->generate();
+        // cut away the Date and Message-ID headers as there is no way to 
predict what they will be
+        $return = join( ezcMailTools::lineBreak(), array_slice( explode( 
ezcMailTools::lineBreak(), $return ), 0, 7 ) );
+
+        $this->assertEquals( $expected, $return );
+    }
+
     public function testFullMail()
     {
         $this->mail->from = new ezcMailAddress( '[EMAIL PROTECTED]', 'Frederik 
Holljen' );

-- 
svn-components mailing list
[email protected]
http://lists.ez.no/mailman/listinfo/svn-components

Reply via email to