私は Solaris 5.11 で sendmail を実行しています。ローカル ユーザー名は <文字><数字> の形式です (例: hn06511)。以前は、<ユーザー名>@olddomain.com を指すためにエイリアスを使用していました。
<ユーザー名> <ユーザー名>@olddomain.com
新しい電子メール アドレス スキームと新しいドメインが導入されました。電子メール アドレスの形式は、<firstname>.<lastname>@newdomain.com になります。
そこでエイリアスを次のように変更しました。
<ユーザー名> <名>.<姓>@newdomain.com
これは機能しますが、<username>@olddomain.com は機能しなくなりました。さらに悪いことに、古いスタイルにハードコードされた電子メール アドレスを持つスクリプトが多数あります。
そこで、<username>@olddomain.com を <firstname><lastname>@newdomain.com に変更したいと思います。これを実現するには virtusertables を使用できると考え、次の内容を含む virtusertable を作成しました。
@olddomain.com %1
おそらく、<anybody>@olddomain.com を取得して、ユーザー名 (%1) のみにルーティングするはずです。その後、定義したエイリアスによって <username> -> <firstname>.<lastname>@newdomain.com に変換されることを期待していました。しかし、私が見る限り、sendmail はこの virtusertable を完全に無視し、<username>@olddomain.com への配信を試みていますが、もちろん失敗しています。
AFAICT virtusertable を適切にフォーマットし、makemap を実行しました (dbm と hash のどちらを使用すべきでしょうか? どちらも見たことがあります)。AFAICT 適切な FEATURE を入力し、make を実行して、生成された sendmail.cf が適切な場所にあることを確認しました。FEATURE が次のように表現されているのを見たことがあります。
機能(
virtusertable',
dbm -o /etc/mail/virtusertable')
そして
機能(
virtusertable',
hash -o /etc/mail/virtusertable')
しかし、どちらも機能しません。
どのようなデバッグ情報やその他の情報を提供して試すことができますか?
前もって感謝します。
答え1
virtusertable ユーザー root のデバッグ コマンド
@oldomain.com
virtusertableのエントリを探す
echo '/map virtusertable [email protected]' | sendmail -bt
sendmail が virtusertable で olddomain.com の電子メール アドレスをチェックするかどうかを確認します。
echo '3,0 [email protected]' | sendmail -d60.5 -bt
-d60.5
マップのルックアップ (virtusertable ルックアップも) を追跡します。
その他のヒント:
m4
別の引用を期待するFEATURE(virtusertable,`hash /etc/mail/virtusertable')
virtusertable をオプションにしないでください。行
-o
から削除しますFEATURE
。sendmail
では、-o
不足している virtusertable は無視されます。Sendmail は virtusertable のコンパイル済みバージョンを使用します。virtusertable
makemap
をコンパイルするために使用します。$=w
virtusertable は、ローカル電子メール ドメイン ( ) と$={VirtHost}
ドメインに対してのみ参照されます。両方のドメインのリストを取得するには、rootとして以下のコマンドを使用します。
echo '$=w' | sendmail -bt echo '$={VirtHost}' | sendmail -bt