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