送信されたはずのメールが届かない
TROUBLE REPORT
メールが届かない…
たまにはメール送信プログラムのテストをしないとね、ということで EZ-NET のメールフォームが正常に動作するかを調べてみたところ…。送信は完了するものの、いっこうにメールが届かないという事態に遭遇してしまいました。
サーバがエラーを返したなら、ちゃんとエラーメッセージを表示する仕様のはず…。
調べてみると、どうやらメールフォームが依頼している SMTP サーバ自体は正常に稼動しているものの、肝心の届け先 (自分のメールサーバ) がエラーで受理できなくなっているようでした。
つい先日までちゃんと動いていたのに…、そういえばここ2日はやけに静かだったっけ…。などと思い返しながらも原因を調べてみることにしました。
エラーの原因
TELNET を使って接続実験をおこなってみることにしました。
やり方は簡単で、次のような流れで情報を送っていきます。途中のサーバからの応答は省いてますけど、あいだあいだに OK なりエラーなりの応答があるのでそれを見てエラーの箇所を判断します。
telnet xxxx.ez-net.jp 25
helo ez-net.jp
mail from: xxxx@xxxx.xxxx.xxx.xxx
rcpt to: yyyy@dummy.ez-net.jp
data
From: xxxx <xxxx@xxxx.xxxx.xxx.xxx>
To: yyyy <yyyy@dummy.ez-net.jp>
Subject: Test Mail
data
test mail.
.
上記のような感じで入力を進めていきます…。
というところなのですけど、最初の段階、TELNET を行った段階で、どうも待たされてしまって進めなかったのでした。なのでとりあえずサーバの再起動を行って、再び TELNET してみると、今度はちゃんと応答がありました。
そして上記のとおり入力を進めてみると…、出ましたエラーが。
qq write error or disk full(#4.3.0)
ちょうど "." を打ってメールの入力を完了したときにこの表示がでました。
とりあえずはちゃんとしたサーバからのエラー通知なので、届かなかったメールは (外部からならば)、後で再送信を行おうと蓄えられているか、または配達不能として戻っていると思われるので、一応は… 一安心です。
さて、肝心のエラーの内容ですけど、文字通り、「ディスクが壊れているか、または容量いっぱい」 です。
問題を解消する
ディスクがいっぱいであるならば、話は簡単です。
qmail は /var/qmail/ ディレクトリを作業領域としているので、その部分がいっぱいになっているかを調べ、いっぱいなようならば不要なファイルを削除すればいいだけのこと…。
df
このコマンドを実行すると、パーティションごとのディスク使用状況を確認する事ができます。
これで /var/qmail/ に該当するパーティション、自分の環境では /var の使用容量を確認してみると…。ん、なんだか Free (未使用) 領域がまだまだ余っているような表示がなされました。
とすると、ディスクエラー…?
と思いつつもインターネットを調べてみると、該当する事例がありました。そこを見てもやはり、df -i を使って容量を確認せよとのことでした。とりあえず du したり df -i したりと、いろいろとやっていると…。
いつのまにか、/var パーティションの使用容量が 100% と表示されているではないですか。パーティションがいくつかあったから見る場所を間違えていただけなのか、それとも何かタイミングが悪かったのか…。
なにはともあれ、そうとわかればこっちのものです。
一番容量を食っていたのが、Syslog およびその他のログファイルだったので、それをアーカイブして別の領域へ移動してやります。これで /var の使用容量が 15% ほどまで激減したので、これでエラー発生とは言わせない…。
揚々と思い再送信実験を行ってみると、… まだエラーが発生してしまっていました。
けれど恐らく対処は完璧なので、コンピュータの再起動を行ってもう一度送信実験を行ってみると、今度はうまく送信処理が完了となりました。受信作業も行ってみると、無事、送信してみたメールを受け取る事ができるようになりました。
/var ディレクトリはログファイルの保存先にもなっていたりするので、容量にゆとりがあるかどうか、日々チェックしないと怖いですね。今後、よく気をつけなくてはです。