Posts about: » qmail

qmailのキューの不整合解消

Written in 2016年02月16日 by | コメントする( 0件 )

qmailでキューの不整合が発生し、

Jan 17 05:08:05 sakuravps qmail: 1452974885.252009 warning: trouble opening remote/0/40960677; will try again later

のようなエラーメッセージがmaillogに繰り返し吐き出されたりする場合、メールキューの不整合を解消する。

queue-fixをダウンロード

# wget http://www.netmeridian.com/e-huss/queue-fix.tar.gz

解凍

# tar xvzf queue-fix.tar.gz
# cd queue-fix-1.4

修正

# vi error.h

----------------------
「extern int errno;」→「#include <errno.h>」
----------------------

# make

不整合解消

# service qmail stop
# ./queue-fix -i /var/qmail/queue
# service qmail start

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サーバは変更されることがあるので、やはりパッチを当ててやる方がよいだろう。