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