TPOPS は POP3 サーバです。RFC 1939 に準拠しています。 Ruby で実装されています。 サポートされているメールボックスは Maildir 形式です。 POP ログイン名やメールアドレスなどのユーザ情報は MySQL のテーブルで管理することもできます。
# cd /usr/local # tar xpfvz /tmp/tpops-0.8.tar.gz # chown -R root:root tpops-0.8 # ln -s tpops-0.8 tpops
設定できるパラメータは次の通りです。 これらのパラメータはコマンドライン上で --parameter=value としても記述できます。 コマンドラインでの指定が優先されます。
パラメータ名 | デフォルト値 | 意味 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
標準パラメータ | ||||||||||||
config | なし(tpopsと同じディレクトリの tpops.conf) | 設定ファイルを指定します。通常はコマンドラインで指定します。 設定ファイル中で指定してもおそらく意味はないでしょう。 | ||||||||||
port または p | 110 | tpops が listen するポート番号。 「ホスト名:ポート番号」の形式でホスト名を指定した時は、そのアドレスだけで listen します。 | ||||||||||
hostname | なし(「uname -n」の結果) | クライアントの接続時に最初に返されるメッセージ中に含まれるホスト名。 | ||||||||||
connection-keep-time | 3600 | 最大接続維持時間(秒数)。 接続開始からこの時間が経過すると、オペレーション中であっても強制的に接続を切断します。 | ||||||||||
command-timeout | 600 | コマンド待ち時間(秒数)。 クライアントからこの時間入力がないと、接続を切断します。 | ||||||||||
inetd | なし | 指定されている場合は inetd から起動されたものとして動作します。 | ||||||||||
fg | なし | 指定されている場合はフォアグラウンドで動作します。 | ||||||||||
version | なし | 指定されている場合はバージョン情報を表示して終了します。 | ||||||||||
debug | なし | 指定されている場合はクライアントのコマンドとサーバの応答をログに記録します。 | ||||||||||
access-log | なし | アクセスログファイル名。 | ||||||||||
error-log | なし | エラーログファイル名。 | ||||||||||
pid-file | なし | プロセスIDを記録するファイル名。 | ||||||||||
user または u | なし(親プロセスと同じ) | 子プロセスの UID。passwd 認証に root 権限が必要なシステムでは、このパラメータを設定すると認証できません。 | ||||||||||
group または g | なし(親プロセスと同じ) | 子プロセスの GID。 | ||||||||||
syslog | syslog ファシリティ名。syslog に記録しない場合は「none」を指定します。 | |||||||||||
auth-type | passwd | ユーザ認証方式。passwd, mysql のいずれかを指定します。 | ||||||||||
mailbox-type | maildir | メールボックス形式。maildir, proxy のいずれかを指定します。 | ||||||||||
parallel-type | prefork | 並列方式。prefork, fork, thread のいずれかを指定します。 | ||||||||||
domain | ログイン名に「@」「%」「+」のいずれも含まれてない場合に、「@domainname」をログイン名に追加して認証を試みます。 | |||||||||||
error-interval | 5 | クライアントからのコマンドがエラーになった場合に、エラーを返す前に遅延する秒数。 | ||||||||||
min-servers | 5 | 最小子プロセス数。子プロセス数がこの値以下になると、この値になるまで子プロセスが起動されます。 parallel-type=prefork 時のみ有効。 | ||||||||||
max-servers | 50 | 最大子プロセス数。子プロセス数はこの値以上にはなりません。 | ||||||||||
max-use | 100 | 子プロセスが処理する接続数の最大値。この値を超えると子プロセスは終了します。 parallel-type=prefork 時のみ有効。 | ||||||||||
max-idle | 100 | 最大接続待ち時間。接続終了後、この時間内に新たな接続がないと子プロセスは終了します。 parallel-type=prefork 時のみ有効。 | ||||||||||
auth-type = passwd 時に有効なパラメータ | ||||||||||||
apop-passwd-file | なし | APOP 認証時に使用される ID とパスワードの対が DBM 形式で格納されたファイル名。指定された場合は、APOP が使用できます。 | ||||||||||
maildir | Maildir | Maildir 形式のメール格納ディレクトリのユーザのホームディレクトリからの相対パス。 | ||||||||||
auth-type = mysql 時に有効なパラメータ | ||||||||||||
mysql-server | なし | MySQLサーバ名。 | ||||||||||
mysql-user | なし | MySQLログインユーザ名。 | ||||||||||
mysql-passwd | なし | MySQLログインパスワード。 | ||||||||||
mysql-db | なし | MySQLデータベース名。 | ||||||||||
mysql-auth-query | select login,passwd,maildir from user where login="%s" | ログイン名,パスワード,Maildir を取り出すためのクエリ文字列。 「%s」はクライアントから渡されたログイン名に置き換えられます。 「%u」はログイン名のローカルパート(@より左の部分)、 「%d」はログイン名のドメインパート(@より右の部分)に置き換えられます。 ログイン名に「@」が含まれていない場合は「%d」は空になります。 | ||||||||||
mysql-crypt-passwd | no |
データベースから取り出したパスワード文字列が暗号化されている場合、暗号化方式を指定します。
no 以外の値が設定されている場合は、APOP 認証はできません。
有効な値は、次の通りです。
| ||||||||||
mailbox-type = maildir 時に有効なパラメータ | ||||||||||||
maildir-use-filesize | yes | Maildir 形式で保存されているメールファイルのサイズを、メールのサイズとして扱います。 RFCに従わなくなる可能性があるので注意。 | ||||||||||
maildir-extended | yes | Maildir 形式で保存されているメールファイルのファイル名中に「S=数値」があれば、それをメールのサイズとして扱います。 maildir-use-filesize よりも優先されます。 RFCに従わなくなる可能性があるので注意。 | ||||||||||
maildir-lock | yes | メールボックスをロックします。ログイン中は同じメールボックスを使用する ID ではログインできません。 | ||||||||||
maildir-uidl-convert | no | Maildir/tpops_uidl ファイルがある場合に UIDL を変換します。 tpops_uidl ファイルの内容は「ファイル名<TAB>UIDL」の行のリストです。 | ||||||||||
mailbox-type = proxy 時に有効なパラメータ | ||||||||||||
pop-server | localhost:10110 | 接続先POPサーバを指定します。 |
MySQL に TPOPS 用のデータベースを作成し、tpops_auth-mysql.sql を使用してテーブルを作成してください。
% mysqladmin create tpops % mysql tpops < tpops_auth-mysql.sql
/etc/inetd.conf に次のように記述します。
pop3 stream tcp nowait root /usr/local/tpops/tpops tpops --inetd
その後 inetd プロセスに HUP シグナルを通知します。
SIGTERM を受信すると終了します。 処理中の子プロセスは処理が終わるまで終了しません。
SIGHUP を受信すると、子プロセスを終了させ、tpops.conf を再読み込みします。 処理中の子プロセスは処理が終わるまで終了しません。 tpops.conf ファイル中の記述よりもコマンドラインで指定したオプションが優先されます。
SIGINT を受信すると終了します。
OS にユーザを登録してください。 メールボックスは、ユーザのホームディレクトリ直下の 'Maildir' が使用されます。
APOP を使用する場合は、tpops.conf 内に apop-passwd-file を設定してください。 APOP 使用時にはこのファイルから、パスワードが検索されます。 ここで指定するファイルの内容は、ログイン名をキーとしてプレーンパスワードを得られるような DBM 形式です。
DBM 形式ファイルの編集には、tpops_passwd コマンドを使用できます。
コマンド | 説明 |
---|---|
tpops_passwd pwdfile id password | pwdfile に ID とパスワードを追加する |
tpops_passwd -f filename pwdfile | filename からIDとパスワードのリストを読み込み pwdfile に追加する |
tpops_passwd -d id pwdfile | pwdfile から ID を削除する |
tpops_passwd -l pwdfile | pwdfile 内の ID とパスワードをリストする |
user テーブルにユーザ情報を登録してください。
フィールド名 | 値 |
---|---|
uid | ユーザID(数値) |
login | POPログイン名 |
passwd | POPパスワード |
メールアドレス | |
maildir | Maildir の場所 |
tpops.conf で access-log を指定すると、ログアウト時に指定したファイルにログを書き込みます。 ログの形式は次の通りです。
接続元IP ログイン日 時刻 ログアウト日 時刻 ログイン名 ログイン時メッセージ数 ログイン時メッセージサイズ ログアウト時メッセージ数 ログアウト時メッセージサイズ
syslog を指定すると、指定したファシリティで syslog にログを書き出します。 syslog はファシリティを表わす文字列です。
qmail や Postfix の Maildir 形式では、メッセージの改行コードが "\n" としてファイルに格納されます。 しかし POP プロトコルでは改行コードは "\r\n" に定められています。 LIST コマンドなどで通知されるメッセージサイズも POP プロトコル上は、改行コードを2バイトとしてカウントする必要があります。 そのため、メッセージサイズを得るだけでも、メッセージファイルを読み、改行コードを調べる必要があります。
(qmail に付属の qmail-pop3d はこの処理をサボって、ファイルサイズを返しているため、RFC 的には正しくありません。)
Maildir++ 形式のファイル名でメッセージを格納するメール配送エージェントを使用すれば、ファイル名にメッセージサイズが含められているので、ファイルの内容をチェックする必要がなく、高速に処理できます。 メールファイルが Maildir++ 形式のファイル名の場合は、TPOPS は自動的にファイル名からサイズを得ようとします。この動作を無効にしたい場合は tpops.conf に「maildir-extended = no」を設定してください。
ファイル名が Maildir++ 形式でない場合は、ファイルサイズをメッセージサイズとして使用することで高速に処理しようとします(qmail と同じ手法)。 この動作を無効にしたい場合は tpops.conf に「maildir-use-filesize = no」を設定してください。 ただし、メッセージサイズを調べるために、メッセージファイルの内容を読み出すため、遅くなります。注意してください。
正常に動作することを期待して作られていますが、不具合がないことは保証できません。 重要なメールデータが失われたとしても私は責任を負えません。 十分テストした上でご使用ください。
このプログラムは Ruby ライセンスに従います。
Last modified: Thu Jan 26 20:09:11 JST 2006