【解決】qmail + vpopmail で「no mailbox here by that name」エラーが出る原因と対処法

技術メモ

はじめに

qmail + vpopmail 環境で、メールボックスが存在するにもかかわらず「Sorry, no mailbox here by that name」エラーが発生する場合、意外な設定ミスが原因であることがあります。

本記事では、この問題の原因と解決方法を詳しく解説します。

症状

エラーログ

qmail: delivery 466: failure: Sorry,_no_mailbox_here_by_that_name._(#5.1.1)/

状況

  • /var/vpopmail/domains/example.jp/postmaster/ ディレクトリは存在する
  • vpasswd にユーザーエントリがある
  • .qmail-default は正しく設定されている
  • virtualdomainsusers/assign も正しい

それなのに、メールが配送されない。

原因

/var/qmail/control/locals にドメインが含まれていた

$ cat /var/qmail/control/locals
example.jp    # ← これが原因

なぜこれが問題なのか

qmail の配送優先順位

qmail はメールの宛先ドメインを以下の順序で判断します:

1. locals に含まれる       → システムローカル配送(/etc/passwd)
2. virtualdomains に含まれる → 仮想ドメイン配送(vpopmail)
3. どちらにも含まれない    → リモート配送(外部SMTP)

localsvirtualdomains より優先されます。

つまり:

locals virtualdomains 結果
含まれる 含まれる locals が優先(/etc/passwd を参照)
含まれない 含まれる virtualdomains が適用(vpopmail で配送)

今回のケース

  1. localsexample.jp が含まれていた
  2. qmail は example.jp を「システムローカルドメイン」と判断
  3. virtualdomains の設定が無視された
  4. /etc/passwdpostmaster ユーザーがいない
  5. → 「no mailbox here by that name」エラー

解決方法

1. 現在の設定を確認

cat /var/qmail/control/locals

vpopmail で管理しているドメインが含まれていないか確認します。

2. locals からドメインを削除

# バックアップ
cp /var/qmail/control/locals /var/qmail/control/locals.bak

# ドメインを削除(example.jp の部分を対象ドメインに置き換える)
grep -v 'example.jp' /var/qmail/control/locals > /tmp/locals.new
cat /tmp/locals.new > /var/qmail/control/locals

3. qmail-send に設定を再読み込みさせる

killall -HUP qmail-send

4. 動作確認

echo "test" | /var/qmail/bin/qmail-inject [email protected]
tail -f /var/log/maillog | grep user

各設定ファイルの役割

qmail + vpopmail 環境で重要な設定ファイルを整理します。

/var/qmail/control/locals

システムローカルドメインの一覧

  • ここに記載されたドメイン宛のメールは /etc/passwd のユーザーへ配送される
  • vpopmail 管理ドメインは含めてはいけない

典型的な内容:

localhost
mail.example.jp

/var/qmail/control/virtualdomains

仮想ドメインのルーティング設定

example.jp:example.jp

この設定により、[email protected] 宛のメールは example.jp-user というローカルアドレスに変換されます。

/var/qmail/users/assign

ローカルアドレスと配送先のマッピング

+example.jp-:example.jp:89:89:/var/vpopmail/domains/example.jp:-::
.

example.jp- で始まるアドレスを、vpopmail のドメインディレクトリにマッピングします。

/var/qmail/control/rcpthosts

メールを受け取るドメインの一覧

example.jp

ここに記載がないドメイン宛のメールはリレーとして拒否されます。

正しい設定例(vpopmail 環境)

/var/qmail/control/locals

localhost

※ vpopmail で管理するドメインは含めない

/var/qmail/control/virtualdomains

example.jp:example.jp
example.com:example.com

/var/qmail/control/rcpthosts

localhost
example.jp
example.com

/var/qmail/users/assign

+example.jp-:example.jp:89:89:/var/vpopmail/domains/example.jp:-::
+example.com-:example.com:89:89:/var/vpopmail/domains/example.com:-::
.

トラブルシューティングのポイント

「no mailbox here by that name」エラーが出たら

1. まず locals を確認する

cat /var/qmail/control/locals

2. vdelivermail を手動実行してみる

cd /var/vpopmail/domains/example.jp
export EXT=user HOST=example.jp USER=user
export HOME=/var/vpopmail/domains/example.jp/user
echo "test" | /var/vpopmail/bin/vdelivermail '' bounce-no-mailbox

これが成功するなら、vdelivermail 自体は正常。qmail の設定を疑います。

3. virtualdomainsusers/assign を確認

cat /var/qmail/control/virtualdomains
cat /var/qmail/users/assign

4. users/cdb を再構築

/var/qmail/bin/qmail-newu

まとめ

  • qmail は localsvirtualdomains の順で配送先を判断する
  • vpopmail 管理ドメインが locals に含まれていると、virtualdomains が無視される
  • 「no mailbox here by that name」エラーは、vdelivermail の問題ではなく qmail のルーティング設定の問題であることが多い
  • vpopmail 環境では、管理ドメインを locals に含めないこと

参考

コメント

タイトルとURLをコピーしました