はじめに
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は正しく設定されているvirtualdomainsとusers/assignも正しい
それなのに、メールが配送されない。
原因
/var/qmail/control/locals にドメインが含まれていた
$ cat /var/qmail/control/locals
example.jp # ← これが原因
なぜこれが問題なのか
qmail の配送優先順位
qmail はメールの宛先ドメインを以下の順序で判断します:
1. locals に含まれる → システムローカル配送(/etc/passwd)
2. virtualdomains に含まれる → 仮想ドメイン配送(vpopmail)
3. どちらにも含まれない → リモート配送(外部SMTP)
locals は virtualdomains より優先されます。
つまり:
| locals | virtualdomains | 結果 |
|---|---|---|
| 含まれる | 含まれる | locals が優先(/etc/passwd を参照) |
| 含まれない | 含まれる | virtualdomains が適用(vpopmail で配送) |
今回のケース
localsにexample.jpが含まれていた- qmail は
example.jpを「システムローカルドメイン」と判断 virtualdomainsの設定が無視された/etc/passwdにpostmasterユーザーがいない- → 「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. virtualdomains と users/assign を確認
cat /var/qmail/control/virtualdomains
cat /var/qmail/users/assign
4. users/cdb を再構築
/var/qmail/bin/qmail-newu
まとめ
- qmail は
locals→virtualdomainsの順で配送先を判断する - vpopmail 管理ドメインが
localsに含まれていると、virtualdomains が無視される - 「no mailbox here by that name」エラーは、vdelivermail の問題ではなく qmail のルーティング設定の問題であることが多い
- vpopmail 環境では、管理ドメインを
localsに含めないこと


コメント