最近 1 日に 10 通程度、毎回違う From で Subject も本文も存在しない
スパムが来るのですが、bsfilter で捕捉できません。仕方がないので、そ
のようなメールは問答無用でスパムフォルダに振り分けることにしました。

以下が ~/.procmailrc のレシピです。touch しているのは、Mew でスパム
フォルダを訪問した時に自動でスキャンを走らせるためです。

PATH=${HOME}/bin:${PATH}
MAILDIR=${HOME}/Mail

:0
* !^Subject:
{
       :0 HB:
       * ? mail-body-empty
       * ? touch ${MAILDIR}/spam/.mew-mtime
       ${MAILDIR}/spam/.
}

mail-body-empty は自作の Ruby スクリプトです。~/bin に置きました。
以下にコピペします。

#!/usr/bin/ruby

# 標準入力から渡されたメールの本文が空だったら 0、空でなかったら 0 以外を返す。
# メール本文が空行のみ、または空行の連続を「空」と定義する。

mode = :header

STDIN.each do |line|

  case mode
  when :header
    if /^$/ =~ line
      mode = :body
    end
  when :body
    unless /^$/ =~ line
      exit 1
    end
  end

end

exit 0

### End of file

最初は “* ? mail-body-empty” でなく “* < 1” と書いていたのですが、
うまくいかなかったのでこのスクリプトを作りました。どうやら “<” は
ヘッダと本文の合計サイズを評価する仕様のようです。