アーカイブ » 2014 » 1月

qmailのリモート送信キューを一括削除

Written in 2014年01月15日 by | コメントする( 0件 )

qmailで送信キューが大量にたまってしまったらどうするか。まずは、状況把握。
# /var/qmail/bin/qmail-qstat
これにより、現在のキューの状況がわかる。

messages in queue: 342007
messages in queue but not yet preprocessed: 843

のようにでる。34万件もたまってる。。。

どんなキューかを確認する。

# /var/qmail/bin/qmail-qread

とすると、


15 Jan 2014 04:28:45 GMT #163011079 644 <but@hogehoge.jp> bouncing
remote fugafauga@gmail.com
remote foofoo@yahoo.com
15 Jan 2014 05:27:46 GMT #163386784 568 <zyse@hogehoge.jp>
remote barbar@hotmail.com

のようにでる。
<but@hogehoge.jp>のように<>で囲まれたものが送信元アドレスだ。
#の後の数字がキュー番号。remote のあとにあるのが送信先アドレス。

リモート配信されるキューの情報は、

/var/qmail/queue/remote/*/(キュー番号)
/var/qmail/queue/info/*/(キュー番号)
/var/qmail/queue/mess/*/(キュー番号)
/var/qmail/queue/bounce/*/(キュー番号)

にたまるので、これらを削除していく。
参考: http://d.hatena.ne.jp/japanrock_pg/20090417/1239959873
そのスクリプトが以下の通り。

/bin/qmail-qread | tail -n '+2' \
| grep '#' | grep '@hogehoge.jp>' \
| sed -e 's/^.*#//g' | sed -e 's/ .*$//g' \
| awk 'NF > 0 { system("rm -f queue/remote/*/"$1";rm -f queue/info/*/"$1";rm -f queue/mess/*/"$1";rm -f queue/mess/*/"$1";rm -f queue/bounce/"$1) }'

一行目で、qmail-qreadを使って、先のリストを出力する。
二行目で、キュー番号があり、かつ送信元がhogehoge.jpのドメインのものだけに絞る。
三行目で、#の前を削除し、キュー番号の後の文字列を削除し、キュー番号だけ残す。
(awkで抜き出そうと思ったのだが、なぜかレコードの区切り文字がうまく働かなかった。。。)
四行目で、awkを使って、各キューファイルを削除している。

qmailで deferral: CNAME_lookup_failed_temporarily._(#4.4.3)

Written in 2014年01月15日 by | コメントする( 0件 )

eFaxにシステムからメールを送ってFAX送信を実現しようとした。
しかし、eFaxの送信用のメールアドレス(ドメイン部efaxsend.com)に送ろうとしたところ、
qmailのメールログに

deferral: CNAME_lookup_failed_temporarily._(#4.4.3)

と記録され、ディファーラルされて送信できない。

原因としては、

送り先ホストをDNSで名前解決できていない。

というものが考えられるが、digコマンドで正常に引けることが確認できた。
別の理由がある。

qmailでは512バイト以上のDNS応答をエラーとする

というのが原因のようです。efaxsend.comのMXレコードは私が見た時点で、16個もあった。
パッチが公開されています。

http://www.ckdhr.com/ckd/qmail-103.patch

このパッチを当てるか、下記のようにqmailのsmtproutes設定ファイルで、所定のドメイン宛の送信先SMTPサーバを直指定することで対応できる。

# vi /var/qmail/control/smtproutes
efaxsend.com:sendrelay10.j2.com

ただ、相手のSMTPサーバは変更されることがあるので、やはりパッチを当ててやる方がよいだろう。