スパムとして処理されたメールの一部が, 通知メールに入っているが,
文字化けして見えない.
$hdr_encodingと$bdy_encodingで日本語化させればよいのかと
$hdr_encoding='iso-2022-jp';
$bdy_encoding = 'iso-2022-jp';
と設定変更してみるが, うまくいかない. 文字化けがますます酷くなった.
ムカつく. 生意気. ちと遊んでみた.
結果, amavisd-new-2.3.3 (20050822)の/usr/sbin/amavisdに
こんなパッチを当てればちゃんと送られるようになった.
Perl内部でのUnicode処理がうまくいってなかったのね.
ちなみに, 通知メールの文章自体を日本語にするにはおそらく
safe_decode()関数の中に, 同じような変更を加えないとだめだろう
パッチの中身
--- amavisd.orig 2006-01-28 15:31:53.000000000 +0900
+++ amavisd 2006-05-16 01:07:03.000000000 +0900
@@ -1392,6 +1392,7 @@
# A wrapper for Encode::encode, avoiding a bug in Perl 5.8.0 which causes
# Encode::encode to loop and fill memory when given a tainted string
+use Encode::Guess;
sub safe_encode($$;$) {
if (!$unicode_aware) { $_[1] } # just return the second argument
else {
@@ -1399,7 +1400,12 @@
$check = 0 if !defined($check);
# taintedness of the string, with UTF-8 flag unconditionally off
my($taint) = Encode::encode('ascii',substr($str,0,0));
- $taint . Encode::encode($encoding,untaint($str),$check); # preserve taint
+ my $enc = guess_encoding(untaint($str), qw/euc-jp shiftjis 7bit-jis/);
+ if (ref($enc)){
+ $taint . Encode::encode($encoding,$enc->decode(untaint($str)),$check); # preserve taint
+ }else{
+ $taint . Encode::encode($encoding,untaint($str),$check); # preserve taint
+ }
}
}
0 件のコメント:
新しいコメントは書き込めません。