|
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に取得してシグナルを送信します。
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を使う意味がなくなってしまうので、極力元の形を残すようにしました。
|
|