[rt-devel] RT 3.0.3rc2
Autrijus Tang
autrijus at autrijus.org
Thu Jun 19 04:44:58 EDT 2003
On Thu, Jun 19, 2003 at 12:11:48PM +0400, Dmitry Sivachenko wrote:
> 1) When I am sending http://mitya.pp.ru/rt-bad-email1.dat, the following
> appears in the maillog:
That mail has the extremely evil header:
From: =?UNKNOWN?Q?=C8=ED=F2=E5=F0=ED=E5=F2_=EC=E0=F0=EA=E5=F2=E8=ED=E3?=
and RT simply does not know how to handle this encoding.
I have committed the patch below into my branch which takes care of
this case by applying the same _GuessCharset routine to MIME words.
As for your second problem, I can't duplicate it -- but maybe you'd
like to check your @EmailOutputEncoding?
Thanks,
/Autrijus/
--- //depot/RT/rt/lib/RT/I18N.pm 2003/06/19 08:03:42
+++ //depot/RT/rt/lib/RT/I18N.pm 2003/06/19 08:34:19
@@ -273,7 +273,11 @@
# now we have got a decoded subject, try to convert into
# utf-8 encoding
unless ($charset =~ m/utf-8/i) {
- Encode::from_to($enc_str, $charset, "utf8");
+ eval { Encode::from_to($enc_str, $charset, "utf8") };
+ if ($@) {
+ $charset = _GuessCharset( $enc_str );
+ Encode::from_to($enc_str, $charset, "utf8");
+ }
}
$str .= $prefix . $enc_str . $trailing;
@@ -296,17 +300,33 @@
sub _FindOrGuessCharset {
my $entity = shift;
my $head = $entity->head;
- my $charset;
- my $fallback = 'iso-8859-1';
- return $charset if ($charset = $head->mime_attr("content-type.charset"));
+ if ($head->mime_attr("content-type.charset")) {
+ return $head->mime_attr("content-type.charset");
+ }
my $body = $entity->bodyhandle or return;
- return 'utf-8' if Encode::is_utf8( $body->as_string );
+ return _GuessCharset( $head->as_string . $body->as_string );
+}
+
+# }}}
+
+
+# {{{ _GuessCharset
+
+=head2 _GuessCharset STRING
+
+use Encode::Guess to try to figure it out the string's encoding.
+
+=cut
+
+sub _GuessCharset {
+ my $fallback = 'iso-8859-1';
+ my $charset;
if ( @RT::EmailInputEncodings and eval { require Encode::Guess; 1 } ) {
Encode::Guess->set_suspects(@RT::EmailInputEncodings);
- my $decoder = Encode::Guess->guess( $head->as_string . $body->as_string );
+ my $decoder = Encode::Guess->guess( $_[0] );
if ( ref $decoder ) {
$charset = $decoder->name;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://pallas.eruditorum.org/pipermail/rt-devel/attachments/20030619/29aecb59/attachment.pgp
More information about the Rt-devel
mailing list