qmHandleでメールキューの管理

メールキュートは取り込まれたメールを管理する場所です。
ここでは、メールキューの構造とqmHandleというツールを利用した管理方法を説明します。

メールキューの構造

qmailのメールキューは/var/qmail/queue以下に保存されます。メールキュー内部はいくつかのディレクトリに分かれて保存されています。
ディレクトリには以下のファイルが保存されます。

bounce/メール番号エラーメールの送信元及びエラーの内容
info/分割ディレクトリ/メール番号メールの表書きの発信者
intd/メール番号qmail-queueが生成するヘッダ情報
local/分割ディレクトリ/メール番号ローカル配送先のメールアドレス
mess/分割ディレクトリ/メール番号メールの本文
pid/メール番号メッセージIDを決定するためのディレクトリ
remote/分割ディレクトリ/メール番号リモート配送先のメールアドレス
todo/メール番号表書き、発信者、配送先を集約したもの

メール番号 : メールのメッセージ番号
分割ディレクトリ : qmailでは、キューを高速に配送するためにデフォルトで0~22までのディレクトリに分けて管理しています。
# コンパイル時にconf-splitによって分割するディレクトリが決定するそうです。デフォルトは23

分割ディレクトリは以下の書式で決定されるようです。
分割ディレクトリ = メール番号 % (conf-split)
つまり、メール番号をconf-splitで割った余り値が分割ディレクトリになります。

これでは、どのスプールがキューにたまっているのか分かりにくいですよね。次に紹介するqmHandleをつかって簡単にキューを管理することが出来ます。

メールキューを管理するqmHandleとは

qmHandleとはqmailのキューを閲覧したり、特定のキューを削除したりできるすばらしいツールです。
Perlで記述されていますので動作に置いてperlが必要になります。

ソースの入手

以下のURLから最新のソースを入手してください。
http://qmhandle.sourceforge.net/
今回はqmhandle-1.2.0をダウンロードしました。
http://voxel.dl.sourceforge.net/sourceforge/qmhandle/qmhandle-1.2.0.tar.gz

インストール

ここでは、qmhandle-1.2.0.tar.gzをダウンロードしたものとして説明します。
インストールは単純に展開するだけで完了です。

# tar xvfz qmhandle-1.2.0.tar.gz
GPL
HISTORY
README
qmHandle

ここで利用するのはqmHandleだけです。Perlスクリプトになっていますのでまずは利用する環境に応じて
$stopqmail : qmailの終了方法
$startqmail : qmailの開始方法
vi等のエディッタで設定します。

(1) /etc/rc.d/init.d/qmailを利用の場合

# For instance, this is if you have DJB's daemontools
#my ($stopqmail) = '/usr/local/bin/svc -d /service/qmail-send';
#my ($startqmail) = '/usr/local/bin/svc -u /service/qmail-send';
# While this is if you have a Debian GNU/Linux with its qmail package
my ($stopqmail) = '/etc/rc.d/init.d/qmail stop';
my ($startqmail) = '/etc/rc.d/init.d/qmail start';

(2) daemontoolsを利用の場合 (daemontoolsからサービス起動方法参照)

# For instance, this is if you have DJB's daemontools
my ($stopqmail) = '/usr/local/bin/svc -d /var/service/qmail';
my ($startqmail) = '/usr/local/bin/svc -u /var/service/qmail';
# While this is if you have a Debian GNU/Linux with its qmail package
#my ($stopqmail) = '/etc/init.d/qmail stop';
#my ($startqmail) = '/etc/init.d/qmail start';

あとは、/usr/local/bin/以下にでもqmHandleを移動すればよいでしょう。

# install -o root -g qmail -m 0755 qmHandle /usr/local/bin

qmHandleを使ってみよう

qmHandleのオプションは以下のとおりです。

-a再配送
-lキュー内のローカルキュー・リモートキューのヘッダーとサマリー情報を表示
-Lローカルキューのヘッダーとサマリー情報を表示
-Rリモートキューのヘッダーとサマリー情報を表示
-sキューの数を表示
-mNメール番号Nの内容表示
-dNメール番号Nの削除
-Dキュー内のすべてのメールを削除

(使用例)

(1) キュー内の情報を表示

# qmHandle -l
337680 (17, L)
  Return-path:
  From: 
  To: 
  Subject: testmail
  Date: 21 Jun 2004 17:28:35 +0900
  Size: 2640 bytes

338094 (17, L)
  Return-path:
  From: 
  To: 
  Subject: testmail2
  Date: 26 Jun 2004 03:24:24 +0900
  Size: 7134 bytes

337778 (0, R)
  Return-path:
  From: 
  To: 
  Subject: testmail
  Date: 24 Jun 2004 15:25:12 +0900
  Size: 4662 bytes

337710 (1, R)
  Return-path:
  From: 
  To: 
  Subject: testmail2
  Date: 23 Jun 2004 21:37:02 +0900
  Size: 1806 bytes

Messages in local queue: 2
Messages in remote queue: 2

これはローカルキューに
メール番号 337680,338094 のスプールがあり
リモートキューに
メール番号 337778,337710 のスプールがあることになります。

(2) キューの内容確認
メール番号337680のキューを確認します。

# qmHandle -m337680
 --------------
MESSAGE NUMBER 337680
 --------------
Received: 
Received:
Received:
Date: 21 Jun 2004 17:28:35 +0900
From: 
To: 
Subject: failure notice

テストメールです。

(3) キューの削除
メール番号337680のキューを削除します。
消す際はqmHandleが停止をして削除したのち起動するようですが、タイミングによって起動最低な鋳物として判定されることもありますのでqmailを停止した後に以下のコマンドを実行することをお勧めします。

# qmHandle -d337680
Qmail isn't running... no need to stop it.
Deleting message 14/337677...
Qmail wasn't running when qmHandle was started, so it won't be restarted.

起動してなかったので再起動してくれってことですね。(^^;
数件だけ消すのであれば停止せず、利用しても問題ないと思います。

marronおすすめの参考書 by Amazon
Q-Mail Q-Mail
Oreilly & Associates Inc / John R. Levine, Russell Nelson
¥ 3,965
The Qmail Handbook The Qmail Handbook
Apress / Dave Sill
¥ 5,021
Running Qmail (Sams White Book Series) Running Qmail (Sams White Book Series)
Sams / Richard Blum

Copyright(C) 2004-2006 マロンくん.NET ~サーバ管理者への道~ All Rights. Reserved.