アタマを抱えているのは、とにもかくにもantispam対策。
qmailでは設定ファイルの中に「badmailfrom」というのがあって、これは表書きの差出人アドレスを見て差し戻しをしてくれる。
一方、fetchmailにもMTAの応答に従って、rejectされたメールを差し戻す機能(antispamオプション)がある。
これを組み合わせて、ローカル側で蹴っ飛ばせないかな、と思ったのだが、これがダメダメ。
どういうことかというと、fetchmailが想定しているrejectのタイミングと、qmailが実際にrejectするタイミングとがかみ合っていないらしい。
qmailは、「MAIL FROM」と「RCPT TO」の両方を見てから「badmailfromに書かれているから受け取らないよー」とエラーを返すのだが、fetchmailはその前段階、つまり「MAIL FROM」の段階でエラーを返すことを想定しているらしく。RCPT TOでエラーが返されると、メールボックス自体の設定が不正なものと誤認して、そこで異常終了してしまうのだ。
qmailが普通のMTAとして稼働してるぶんにはqmailの動作は十分機能する。けれども、fetchmailがRCPT TOのエラーを検知してしまったら、「本当にメールボックスの設定が間違っている」場合に困る。否応なしに、すべてのメールが差し戻されてしまうのだ。
あとqmailはSPAM対策用のステータスコードがおかしい。RFC1893にて、rejectする場合のステータスコードは「571」を返すようにとなっていて、sendmailなんかはこれに従っている。けれどもqmailは「553」を返す。これはもともとメールボックスが存在しない場合に返すエラーらしい。
とりあえず両側をhackせにゃならんのだな、これは。
qmailのステータスコードを直すのは難しくはないのだけど、fetchmail側はかなり手を入れてやらないとダメっぽい。
という訳で、とりあえずブン投げ。
時間のある方、誰かなんとかしてくらはい。
|