Sendmail: ローカルおよび非ローカルアドレスのキャッチオール

Sendmail: ローカルおよび非ローカルアドレスのキャッチオール

すべてのメール (つまり、すべてのユーザーとすべてのドメイン、ローカル以外のものも含む) を受け入れ、それを単一のローカル キャッチオール メールボックスに格納するテスト環境用のメール サーバー構成をセットアップする必要があります。

私が持っているのは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

関連情報