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
[email protected]
http://lists.ez.no/mailman/listinfo/svn-components