zuntan02のはてなブログ

備忘録的なものです。時々職場の技術者ブログにも転記してますが、メインはこちらで。

Qmail+RAZOR v2+SpamAsassin 3.3.2+Qmail-Scannerな環境で、日本語名ファイル付メールがはじかれる対応

Qmail+RAZOR v2+SpamAsassin 3.3.2+Qmail-Scannerな環境で、
添付ファイルに日本語名のdocxなどがある場合、
メールははじかれてしまい、送信者にはエラー
(451 qq temporary problem (#4.3.0))が届いていました。

/var/log/maillogを見ると以下の様なログが出ていました

Oct  3 19:15:04 xxxxxxx spamd[21333]: spamd: Unknown encoding: cp50221 at /usr/local/lib64/perl5/Encode/Guess.pm line 119, <GENxx> line xxx.
Oct  3 19:15:04 xxxxxxx X-Qmail-Scanner-2.11:[xxxxxxx.xxxxxxx.jpxxxxxxxxxxxxxxxx]: spamd not returning valid content - try again

http://xoops.fens.net/modules/wiki/?Linux%2Fcfg%2FMail-SpamAssassin-3.3.2
によれば、decodeに失敗するとリストから除外してしまうとのこと。
上記を参照し、PerlのGuess.pmのコードを書き換えることで暫定対応しています。


# Perl修正
vi /usr/local/lib64/perl5/Encode/Guess.pm

[before]

    117     my %try = %{ $obj->{Suspects} };
    118     for my $c (@_) {
    119         my $e = find_encoding($c) or die "Unknown encoding: $c";
    120         $try{ $e->name } = $e;
    121         DEBUG and warn "Added: ", $e->name;
    122     }

[after]

    my %try = %{ $obj->{Suspects} };
    for my $c (@_) {
        my $e = find_encoding($c);
        #my $e = find_encoding($c) or die "Unknown encoding: $c";
        if (defined $e) {
        $try{ $e->name } = $e;
        DEBUG and warn "Added: ", $e->name;
        }
    }

# spamd再起動
/etc/init.d/spamd stop
/etc/init.d/spamd status
/etc/init.d/spamd start
/etc/init.d/spamd status

# qmail再起動
initctl stop svscan
initctl start svscan
/var/qmail/bin/qmailctl stat

上記設定後、数万通のメールを受けていますが、問題は再発していません。
ひとまず良しとしています。

バッドノウハウっぽくて上記を残すことに躊躇もあったのですが、
 あくまで最終手段として、何かの参考になればと思い、残しておきます。上記参考URLには非常に助けられましたので。。。
 「こんなのを広めるな!正解はこれだ!」というのがあれば
 ぜひお教えくださいませ……