続・dovecot mbox環境でInvalid messageseと出てメールが読めない時の覚え書き

[dgg]: dovecot mbox環境でInvalid messageseと出てメールが読めない時の覚え書き

■再発、おさらい

 またまた再現しました。あらためてググってみてもめぼしい情報無し。海外のブログでもわざわざウチの上記エントリを翻訳したものにリンクしてるほど情報が乏しいようです。

 わかっているのは、

  • X-UIDはmbox環境のimapサーバー(dovocot以外も)がキャッシュ用につけるヘッダで、1ずつ増える
  • dovecotの0.99.14以前はこの値が一定以上になるとオーバーフローして負の数に解釈されるためエラーになる
  • 最後の番号は最後のメールではなく、メールボックスの先頭のメールのX-IMAPbaseヘッダの2番目の数値
  • 同時に~(ユーザ名)/imap4/.imap/INBOX/.imap.index*にもキャッシュデータがあるので消すべし

ということ。dovecotの1.0は未だ正式リリースされず。

■番号を振り直す

 で、今回はそもそもの数字がもう何年分も積算して(振り分け前の迷惑メールでもカウントアップするし)かなり大きい数字になるので、1から振り直すことにチャレンジ。

 上記の海外のエントリによりスマートな方法が載っていました。まず、作業中にメールアクセスが発生しないようdovecotとpostfixを停止し、クライアントも念のため終了しておきます。

cd /var/spool/mail
grep -v ‘^X-UID: ‘ hoge > hoge2
grep -v “^X-IMAPbase: ” hoge2 > hoge

で、hogeのスプールからX-UIDとX-IMAPbaseで始まる行をすべて除去します。

 次に前回同様、dovecotがメールボックスのヘッダ情報をキャッシュしているらしいファイルを削除します。

rm ~hoge/imap4/.imap/INBOX/.imap.index*

 上記ブログではこれで大丈夫だったようですが、ウチではきっちり元の番号で振り直されてしまいました。どうも、X-IMAPbaseの最初の引数がメールボックスを特定するためのIDのようなので、この数字をエディタで適当にいじってみたところ上手くいきました。

 Thunderbirdを立ち上げると、受信箱内の一覧を全て再読込しました。モバイルでも使う人は、パケット代節約のため、自宅LANにつながっている時にいちどつなげておいた方がよいかも知れません。

■番号スキップの犯人を発見

 で、前回も不明だった番号が突如ハネあがるトリガなんですが、どうも通販ショップuWorksからの広告メールが原因らしいということをつきとめました。何度か現象が起きている中で、毎回共通して境界にいるのがここのメーリングリストからのメールだったのです。どうも、最初からX-UIDヘッダが大きな数字でついたまま送られてくるらしく、以降のメールのX-UIDがすべて大きく跳ね上がってしまいます。ここのショップのメルマガはお値打ち情報があって重宝してるんですが、とりあえず解除しておきました。

 

 

PostgreSQLでテーブルに列を追加する

 超私的なメモです。

 たぶん、出来るだろうなぁ、と思いつつ、ちゃんと調べたことがなかったPostgreSQLの既存テーブルに後から列を追加するコマンド。

alter table (テーブル名) add (カラム名) (形式);

であっさり成功。うん、これは便利だ。たぶん次使う時には忘れているのでここの書いておこう。

 ついでにカラム名の変更方法。

alter table (テーブル名) rename (変更前) to (変更後);

 ただしカラムを削除したり形式変更したりはテーブルを作り直すしかない模様。

MovableTypeに新たなコメントスパム対策導入

MT-Keystrokesプラグイン Movable Typeコメントスパム対策 – WEBデザイン BLOG

 昨日、サーバーが一切のレスポンスを返さなくなったので何事かと調べてみると、どうもブログへの迷惑コメント、トラックバックが大量に届いて過負荷状態に陥っていた模様。ディスククラッシュとかでなくて良かったけれど、これはそろそろキチンと対策せねばと。

 で、今回は上記の紹介されているMT-Keystrokesというプラグインを導入してみました。JavaScriptでフォーム上でキー入力があったかどうかを検知してチェックするようです。自動スパム送信ツールだとフォームを経由しないのでキー入力のフラグがたたない訳です。以前、似たような仕組みで、フォームにhiddenを埋め込む方法を採っていたんですが、それよりも厳重だし、プラグインなのでMTをバージョンアップするたびにソースを書き換えなくても良い点がメリットです。

 テンプレートは各コメント欄部分ごとに3カ所ずつ。個別アーカイブだけでなく、システムテンプレートのコメント一覧、コメントエラー、コメント確認の方も適用しないといけない点がポイントですね。個別アーカイブだけだと、確認画面経由の時に正しく投稿されないので要注意です。ただ、元テンプレートのバージョンによって、システムテンプレートにはフォームがないものもありました。

 これで迷惑コメントが減ってくれるといいなぁ…

SquirrelMailでログインできなくなった時の覚え書き

SquirrelMail 微調整: linux(vine)と猫とラーメンと
 そういえば、先週帰省していた時に、久しぶりにSquirrelMailを使おうと思ったら「このページにアクセスするにはアカウントが必要です。」と言われてログインできませんでした。
 上記のブログエントリで解決策を発見。/var/lib/php/sessionのオーナーをWebサーバーにしたら解決しました。ありがとうございました。

dovecot +mbox環境でInvalid messageseと出てメールが読めない時の覚え書き

 風邪かインフルエンザかとにかく体調が悪いというのに、いきなりメールが読めなくなりました。

 Spoolにはちゃんと新着がためっているんですが、THUNDERBIRDでアクセスすると「コマンドは成功しませんでした Invalid messageset : -2147483648」みたいなエラーが返ってきます(日本語部分はうろ覚え。数字は毎回異なります)。ググっても日本語でめぼしい情報がなく、英語で手がかりを得られたので、覚え書きとして記しておきます。

 見つけた情報はこちら。dovecot(imap4サーバー)をmbox環境で利用する場合に起きるトラブルで、メールサーバーがメールボックス管理に使うX-UIDというヘッダの数字が大きすぎると発生する模様。(問題が発生しているアカウントをhogeだとして)試しに、

 tail /var/spool/mail/hoge -n 5000 | grep X-UID

などとしてみると、

X-UID: 1731077
X-UID: 1731078
X-UID: 1731079
X-UID: 1731080
X-UID: 1731081
X-UID: 3356154939
X-UID: 3356154940
X-UID: 3356154941

といきなりケタ数がはね上がっていました。とりあえずhogeを編集して10ケタのX-UIDを行ごと削除します(spoolが大きすぎてemacsで開けず、慣れないviで苦労しました)。

 次にdovecotがメールボックスのヘッダ情報をキャッシュしているらしいファイルを削除します。我が家の環境では、

rm ~hoge/imap4/.imap/INBOX/.imap.index*

でイケました。で、dovecotを再起動します。するとあろうことか、またもや10ケタの数字でX-UIDが振られてしまいました。これはどこかに最後の番号を記憶してるだろうと思い、探してみたところ、spoolの頭にメールに見せかけたデータがあり、赤字の部分がX-UIDの最終番号のようでしたので、7ケタの最後の番号に1を足した1731082に書き換えたところ、上手くいきました。

From MAILER-DAEMON Fri Feb  3 04:02:46 2006
Date: 03 Feb 2006 04:02:46 +0900
From: Mail System Internal Data <MAILER-DAEMON@hoge.com>
Subject: DON’T DELETE THIS MESSAGE — FOLDER INTERNAL DATA
Message-ID: <1138906966@hoge.com>
X-IMAP: 0935368447 0000060250 NotJunk Junk JunkRecorded NonJunk $Forwarded $MDNS
ent $Label5 $Label1 $Label2 $Label3 $Label4
Status: RO
X-IMAPbase: 1138911336 1731088 Junk NonJunk $Label1 $Label2 $Label3 $Label4 $Lab
el5 $Forwarded $MDNSent

  発生原因は不明のままですが、とりあえず対処できたので、これでようやく寝られそうです。