すべてのメール (つまり、すべてのユーザーとすべてのドメイン、ローカル以外のものも含む) を受け入れ、それを単一のローカル キャッチオール メールボックスに格納するテスト環境用のメール サーバー構成をセットアップする必要があります。
私が持っているのはSLES 11とSendmail (8.14)で、/etc/mail/virtusertableを次のように変更してみました。
@ catchall
または
@* catchall
しかし、役に立たなかった - 宛先メールアドレス(例:「[メールアドレス]「)は書き換えられないキャッチオール@適切な MX への配信が試行されます。
# sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 3,0 [email protected]
canonify input: santa @ northpole . org
Canonify2 input: santa < @ northpole . org >
Canonify2 returns: santa < @ northpole . org . >
canonify returns: santa < @ northpole . org . >
parse input: santa < @ northpole . org . >
Parse0 input: santa < @ northpole . org . >
Parse0 returns: santa < @ northpole . org . >
ParseLocal input: santa < @ northpole . org . >
ParseLocal returns: santa < @ northpole . org . >
Parse1 input: santa < @ northpole . org . >
MailerToTriple input: < > santa < @ northpole . org . >
MailerToTriple returns: santa < @ northpole . org . >
Parse1 returns: $# esmtp $@ northpole . org . $: santa < @ northpole . org . >
parse returns: $# esmtp $@ northpole . org . $: santa < @ northpole . org . >
ルックアップ テーブルのソース ドメイン部分ではワイルドカードはサポートされていないようです。
Sendmail でこれを実装するにはどうすればよいでしょうか?
編集:に従ってアンジェイのコメント私はmailertableエントリを試しました
. local:catch-all-outgoing
同様に
.. local:catch-all-outgoing
sendmail -bv
どちらの場合も、同じ出力が得られました。
# sendmail -d60.5 -bv [email protected]
map_lookup(dequote, root, %0=root) => NOT FOUND (0)
map_lookup(host, example.net, %0=example.net) => example.net. (0)
[email protected]... deliverable: mailer esmtp, host example.net., user [email protected]
(はい、rootですが、sendmail
非rootとして実行できないようです)
編集:結局、マクロ ファイルで mailertable 機能が有効になっていなかったため、sendmail.cf には動作するための適切な書き換えルールが含まれていませんでした。
答え1
ここで発生している問題:/etc/mail/virtusertable
送信メールではなく、受信メールのみに制限されていると思います。
mailertable または SMART_HOST のデフォルト ルートを使用して、すべての非ローカル メッセージを 1 つのローカル メールボックス/エイリアスに配信できます。
mailertable entry:
. local:catch-all-outgoing
aliases:
catch-all-outgoing: some-local-account
ドットで始まらない LHS エントリは、指定された完全なホスト名と一致します。ドットで始まる LHS エントリは、そのドメイン名 (先頭のドットを含む) で終わるものと一致します。つまり、空でない文字シーケンスの先頭に ".+" 正規表現パターンがあると考えることができます。
RHS は常に「mailer:host」のペアである必要があります。mailer は、メーラーの設定名です (つまり、sendmail.cf ファイルの M 行)。「host」は、そのメーラーに渡されるホスト名になります。
(参照:送信メールのReadme、「MAILERTABLES の使用」セクション)
つまり、次のようになります。
. local:catch-all-outgoing
(1つのドットだけAdrzej のコメント) を /etc/mail/mailertable に追加すると、domain.tld は sendmail.cf で定義されているローカル メール送信者設定にリダイレクトされます。エイリアスによってホスト名がキャッチされcatch-all-outgoing
、ローカル メール アドレスになります。
mailertableを動作させるには、設定で有効にする必要があります。
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
設定を生成する m4 マクロ ファイルに追加すれば、その問題は解決するはずです。
また、sendmail サイトのヘルプ ファイルから:
メールテーブル:
特定のドメインのルーティングをオーバーライドするために使用できる「メーラーテーブル」を含める(クラス {w} に含まれないもの、つまりローカルホスト名)FEATURE の引数はキー定義になります。何も指定されていない場合は、次の定義が使用されます。
ハッシュ /etc/mail/mailertable
このデータベースのキーは、完全修飾ドメイン名またはドットで始まる部分ドメインです (例: "vangogh.CS.Berkeley.EDU" または ".CS.Berkeley.EDU")。後者の特別なケースとして、「.」は他のキーでカバーされていない任意のドメインに一致します。値は次の形式である必要があります: mailer:domain
ここで、「mailer」は内部メーラー名、「domain」はメッセージの送信先です。これらのマップはメッセージ ヘッダーには反映されません。特別なケースとして、フォーム:local:userはローカルメーラーを使用して指定されたユーザーに転送します。
答え2
Sendmail: ローカルおよび非ローカルアドレスのキャッチオール
SMART_HOST
非ローカル ドメインとMAIl_HUB
ローカル メール ドメインを定義できます。
送信メール.mc:
define(`SMART_HOST',`local:some_existing_user')dnl
define(`MAIL_HUB',`local:some_existing_user')dnl
dnl optional part to list local users/mailboxes excluded from the redirect
dnl in /etc/mail/direct-users file (one user per line)
LOCAL_CONFIG
FL/etc/mail/direct-users
divert(0)
追伸
ローカル電子メール ドメインのリストを取得するために使用しますecho '$=w' | sendmail -bt
。デフォルトでは、Sendmail が自動的に入力します。
mailertableはリダイレクトから外部ドメインを除外するために使用できます。
example.net %0