現在、メールはさくらインターネットのレンタルサーバーで運用しています。
いままで、特にトラブルもなく順調に使っていたのですが、先日、急にメールが届かないという事態になりました。
正確さに若干欠けるところもありますが、後日の自分のためにその時の顛末をメモっておきます。
発端
2023/7/24 (月) にお客さんのところから電話があり、私のところに出したメールが戻ってきたのだけどどうすればいいか?という問い合わせがありました。その時は、深く考えもせず、エラーの内容から一時的に届けられなかったっぽいのでしばらく待っててください、とだけ伝えました。
とはいえ、その後不安になってきたので、別のドメインのメアドから、テストメールを出してみました。が、普段なら数分もたたないうちにメールが届くはずなのに、届きません。これ、結構やばいかもと思い始めます。
心配になって、メールの受信記録を追いかけると、7/20 (木)に受診したものはあるにも関わらず、7/21 (金)~ 7/23 (日) の日付のものが一通もありません。毎日早朝にNASからバックアップの成否のメールが飛んできてるはずなのに、それもありません。
この時点で、メールが届いていない事態になっているのがほぼ確定です。
念のため、翌日の 2023/7/25 (火) の朝になって、昨日出したテストメールが届いているか確認すると、届いていないうえに、差し出し元には、エラーメールが返ってきてました。あー、やばいなこれは。
ちなみに、エラーメールの内容はこんな感じでした。
********************************************** ** THIS IS A WARNING MESSAGE ONLY ** ** YOU DO NOT NEED TO RESEND YOUR MESSAGE ** ********************************************** The original message was received at Mon, 24 Jul 2023 17:10:06 +0900 (JST) from xxxxxxx.sakura.ne.jp [xxx.xxx.xxx.xxx] ----- Transcript of session follows ----- .mailfilter(10): Missing ) <送信先のメールアドレス>... Deferred: vmail mailer (/usr/local/bin/maildrop) exited with EX_TEMPFAIL Warning: message still undelivered after 4 hours Will keep trying until message is 5 days old
mailfilter がらみっぽいけど、ちょっとよくわかりません。困ったな、これは。
さくらのサポートへ問い合わせ
まあ、なんとも言えないので、朝一番でさくらのサポートへ問い合わせてみました。回答は明日になるかな?と覚悟していたのですが、同じ日のうちに返信が返ってきました(さくらのサポートさん、仕事早くて素晴らしいです)。内容としては、
メールに関連する EX_TEMPFAIL エラーが 2023/7/20 10:36以降発生している。
メールフィルタの設定が関係している可能性があるので、当該メールアドレスの .mailfilter の名前を変更してみてください。
という趣旨のものでした。
ですので、一度 .mailfilter を mailfilter.org のようにリネームしてみます。
しばらくすると、おぉ、届いていなかったメールが次々と入ってきます。ずばり、これが原因だったようですね。
原因調査
さて、これでメールが届かないという事態は解消できて、まあ、めでたいんですが、 .mailfilter なんて、ここしばらく触っていません。ということで、このようになった原因を調べてみます。
まず、先ほどリネームした mailfilter.org の内容を確認してみると、あれ?
.mailfilter で振り分けを行っているのですが、このファイル中の振り分け先のフォルダ名は UTF-7 での表記のため一見してなんのことかわからないので、細かくコメントを入れているのにそれがなくなってます。具体例を見てみます。
下記が、問題を起こしていた .mailfilter の先頭部分になります。
if ( ! ( /^From:\s*(.*)/ && lookup( $MATCH1, ".whitelist" ) ) ) { xfilter "/usr/local/bin/spamc" } if ( /^X-Spam-Flag:.*YES/ ) { to "maildir/.spam/" } if ( ( $SUBJECT =~ /\s*Tel recorded from.*/ \ ) { to "maildir/.TelFAX/" }
一方、下記が本来のあるべき .mailfilter の先頭部分です。さくらのメールの機能の迷惑メールフィルタ機能を利用すると、 .mailfilter が自動的に設定されるので、書き換え対策に .mailfilter の内容を復元できるようにしてるため、それから持ってきたものです。
if ( ! ( /^From:\s*(.*)/ && lookup( $MATCH1, ".whitelist" ) ) ) { xfilter "/usr/local/bin/spamc" } if ( /^X-Spam-Flag:.*YES/ ) { to "maildir/.spam/" } SUBJECT=`cat | nkf -m -w | grep Subject` #### TelFax if ( $SUBJECT =~ /\s*Tel recorded from.*/ \ || $SUBJECT =~ /\s*Fax received from.*/ ) { to "maildir/.TelFAX/" }
両者を比較すると
- コメントが消えている
- 複数行にわたる条件文が最初の1行のみとなっている
- SUBJECT 変数の設定がなくなっている(SUBJECT 変数の利用についてはこちらの記事を参照)
などの差異があります。こりゃ怪しいぞ。
ということで、不審に思いながら .mailfilter の更新日時を確認すると、メールの不達問題が発生するちょっと前(2023/7/20 8:40)になっています。実に怪しい。
思い当たる原因
記憶は確かではないのですが、メールの不達が起きる前後ぐらいに、レンタルサーバーのコントロールパネルを見たことがあって、メールボックスの空き容量の残りが結構少なくなってたので、問題が起きる前に増やしといたほうがいいなと思って増やしたことがありました。
なので、タイミング的には、どうも、これきっかけで、 .mailfilter が書き換えられたっぽいです。
この点もさくらのサポートに伝えてみたところ、
.mailfilter をサーバーのコントロールパネルから設定できない内容で編集していた場合、コントロールパネルからメールアカウントの設定変更を行うと設定内容が上書きされ、その影響があるかもしれない
といった趣旨の返事をいただきました。
まあ、迷惑メールフィルタのところでも .mailfilter が書き換えられるということを触れたように、さくらさん的には仕様なんだと思うし、ユーザーが勝手に編集しているファイルの内容まで保証できないということもよくわかります。
ということで、今回のことはメールボックスの容量変更が .mailfilter に影響するとは思わなかったため、思わぬ事態を招いたということでしょうかね。
なので、ご自分で .mailfilter を書いてる方は、コントロールパネル経由でメール関係の設定を変更した際は、くれぐれも注意したほうが無難ですよ、という話でした。