[spamassassin][sa-learn] Argument “” isn’t numeric in numeric gt (>) エラー

投稿者: | 2017年5月29日

 この記事は参考記録なので、もしも読んだ方が同じエラーを抱えており模倣する場合は自己責任で。というのも、表面的な応急措置をしただけで、きちんとした原因究明やデバッグなどはしていない。

 自前運用のメールサーバでspamassassinを便利に使わせて頂いている。spamassassinでは、受信したメール内容からスパムメール判定基準を学習するために定期実行するsa-learnというコマンドがあるのだが、このコマンドをcronで仕掛けて動かしていると、あるときから

Argument "" isn't numeric in numeric gt (>) at /usr/share/perl5/vendor_perl/Mail/SpamAssassin/HTML.pm line 497.

というエラーが生じるようになった。

 エラーメッセージを示すソースコードをみてみる。久々のPerl。当該行のコードはこうだ。

                elsif ($rgb[$i] > 255) {

 前後のコードを斜め読み。ものすごくアバウトにしか調べていないが、どうやらHTMLメールを解析する際に、color指定のバリエーションの一つであるrgb(xx,yy,zz)を文字列解析しようとしてxx,yy,zzが数値ではないケース(空文字列)があったために比較条件の型不一致による警告となっている。

 とりあえず、

                elsif ($rgb[$i] !~ /^[0-9]+$/) {
                  $rgb[$i] = 0;
                }
                elsif ($rgb[$i] > 255) {

という感じで判定を手前に追加し、数値じゃないときは0にしちゃう。いちおうこれで当該エラーは解消。

 spamassassinは学習も含めた判定基準の設定がきめ細かくて、どこまで有効に働かすことができているのかを掌握できていないが、自動的にJunk行きになるメールも時間経過とともに変化はあるようだし、まあ使わないよりは使ったほうが良いかなという定性的な感想はある。

 ただ最近の添付つき日本語テキストのスパムメールはけっこう素通りすることが多く、スパムメールとの戦いは本当に過去からずっとイタチごっこである。
 実例として、ごく最近、るるぶトラベルの偽装メールがあった。仕事でメール運用などをお手伝いしているお客様でもけっこう同様のメールがあったようだ。
このとき、情報が早かったのはTwitterだった。

 そのうち、Twitterタイムラインなどに湧き出す発信をAIが判断して、スパムメールかどうかを決める、なんてことも出てくるかも知れない。
 群衆の発する、叡智かゴミか分からない情報から、AIが叡智を拾い出す。
 これに限らず、十年前に夢想していた色々なことがAIの勃興で実現されていくのだろう。長生きするモチベーションとしては十分ではないにせよ、悪くない。

カテゴリー: Perl

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です