Qmail-その他

fg. > サーバー構築 > RedHat系 > Qmail > その他

Queue制御

メールサーバがネットワークから切り離された、あて先メールサーバが落ちている等してメールの送信が出来ないとQmailはQueueにメールを一時保存して暫く再送を試みます。メールが送信可能な状態に戻ればいずれQueueのメールは送信されます。ここでは、Queueの制御コマンドの使い方を説明します。

Queueの中身の確認

Queueにあるメールを確認するには、 を実行します。
# /var/qmail/bin/qmail-qstat
を実行します。Queueの実態は/var/qmail/queue/mess/にあるので、
# ll /var/qmail/queue/mess/*/*
でファイルを確認できます。中身はテキストファイルであるため、moreやlessで確認できます。

Queue内のメールの再送

Queueのメールはいずれ再送されますが、その場で再送するにはqmail-sendにALRMシグナルを送ります。
# ps ax | grep qmail-send`
でqmail-sendのpidに取得してシグナルを送信します。
# kill -ALRM 取得したPID
Queueからメールがなくなっていることを確認します。
# /var/qmail/bin/qmail-qstat

SMTP認証サーバへのリレー

Spam対策でOB25(OP25B)対策を行っているプロバイダが増えていますが、家庭でDDNSを登録していてメールサーバを構築しているとそのままではメールを外部に送信できなくなってしまいます。Qmailでは/var/qmail/control/smtproutesに記述することでプロバイダが提供する送信用メールサーバに対してリレー設定ができます。転送先サーバでSMTP認証が必要な場合は、qmail-remote-auth.patchを適用してコンパルする必要があります。
# vi /var/qmail/control/smtproutes
転送対象ドメイン:転送先サーバー:ポート USERID PASSWD
全てのメールをリレーする場合は転送対象ドメインを空欄にして、
:転送先サーバー:ポート USERID PASSWD
例)
 :rserver.mail.provider.co.jp MY_ID MY_PASS
のように記述します。

qmail-remote-auth.patchの修正

qmail-remote-auth.patchはSMTP認証としてLOGINにのみ対応しています。また、転送先サーバが対応している認証方式にLOGINがあるかの確認を
AUTH LOGIN
AUTH PLAIN LOGIN
AUTH=LOGIN
の完全一致で行っているため、転送先サーバが対応認証方式を
AUTH CRAM-MD5 LOGIN PLAIN
と出力した場合サーバがLOGIN認証に対応しているにも関わらずLOGIN未対応と判断してしまいます。この問題はqmail-remote.cを修正することで対応できます。「void smtp()」関数内の次の箇所を修正します。
while((i += str_chr(smtptext.s+i,'\n') + 1) && (i+14 < smtptext.len) &&
str_diffn(smtptext.s+i+4,"AUTH LOGIN\n",11) &&
str_diffn(smtptext.s+i+4,"AUTH LOGIN ",11) &&
str_diffn(smtptext.s+i+4,"AUTH PLAIN LOGIN\n",17) &&
str_diffn(smtptext.s+i+4,"AUTH PLAIN LOGIN ",17) &&
+ str_diffn(smtptext.s+i+4,"AUTH CRAM-MD5 LOGIN PLAIN\n",26) &&
+ str_diffn(smtptext.s+i+4,"AUTH CRAM-MD5 LOGIN PLAIN ",26) &&
str_diffn(smtptext.s+i+4,"AUTH=LOGIN\n",11) &&
str_diffn(smtptext.s+i+4,"AUTH=LOGIN ",11));
行頭が+の所が今回追加する部分です
AUTH CRAM-MD5 LOGIN PLAIN
の部分は転送先のメールサーバが出力する内容に書き換えて下さい。その際、str_diffnの第3引数の文字数も修正します。転送先サーバの対応認証方式の文字列はパケットキャプチャやメーラーのプロトコルログで確認できます。
もっとスマートに書けそうですが、下手なプログラムを入れてセキュリティーホールを空けてしまっては、Qmailを使う意味がなくなってしまうので、極力元の形を残すようにしました。