すべてのメール(つまり、すべてのユーザーとすべてのドメイン、ローカル以外のドメインも含む)を受け入れ、単一のローカルキャッチオールメールボックスに配置するテスト環境用のメールサーバー構成を設定する必要があります。
私が持っているのは、SENDmail(8.14)を備えたSLES 11で、/ etc/mail/virtusertableを次のように変更しようとしました。
@ catchall
または好き
@* catchall
しかし、役に立たない-宛先メールアドレス(例: "[email protected]")は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でこれをどのように実装しますか?
編集:Andrzejのコメント のメーラー可能なエントリを試しました
. 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として実行できないようです)
編集:マクロファイルでメーラーテーブル機能が有効になっていないため、sendmail.cfに適切な書き換えルールが含まれていませんでした作業。
ここで発生していること:/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」のペアである必要があります。メーラーは、メーラーの構成名です(つまり、sendmail.cfファイルのM行)。 「ホスト」は、そのメーラーに渡されるホスト名になります。
(参照: sendmail readme 、 "USING MAILERTABLES"セクション)
だから次のようなもの:
/ etc/mail/mailertable内の. local:catch-all-outgoing
( Adrzejのコメント のように1つのドット)により、domain.tldはsendmail.cfで定義されたローカルメーラー構成にリダイレクトされます。エイリアスがcatch-all-outgoing
のホスト名をキャッチし、それをローカルの電子メールアドレスにします。
メーラーテーブルを機能させるには、構成で有効にする必要があります。追加
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
構成を生成するm4マクロファイルにそれを処理する必要があります。
sendmailサイトのヘルプファイルからも:
MAILERTABLE:
特定のドメイン(クラス{w}にない、つまりローカルホスト名)のルーティングをオーバーライドするために使用できる「メーラーテーブル」を含めます。 FEATUREの引数が重要な定義である可能性があります。何も指定されていない場合、使用される定義は次のとおりです。
ハッシュ/ etc/mail/mailertable
このデータベースのキーは、完全修飾ドメイン名またはドットが前に付いた部分ドメインです(たとえば、「vangogh.CS.Berkeley.EDU」または「.CS.Berkeley.EDU」)。 後者の特殊なケースとして、「。」他のキーでカバーされていないドメインと一致します。値は次の形式である必要があります:mailer:domain
ここで、「mailer」は内部メーラー名であり、「domain」はメッセージの送信先です。これらのマップはメッセージヘッダーに反映されません。 特別な場合として、次の形式:local:userは、ローカルメーラーを使用して指定されたユーザーに転送します
非ローカルドメインにはSMART_Host
を定義し、ローカルメールドメインにはMAIl_HUB
を定義できます。
sendmail.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)
P.S.
echo '$=w' | sendmail -bt
を使用して、ローカルの電子メールドメインのリストを取得します。 Sendmailはデフォルトで自動的にそれを埋めます。
mailertableを使用して、一部の外部ドメインをリダイレクトから除外できます
example.net %0