次のようなエイリアスがpostfixに設定されています。
[email protected]: [email protected], [email protected] ...
メールが[email protected]に送信され、そのエイリアスの受信者のいずれかが非常に一般的なcc:edである場合(つまり、「全員に返信」)、メールは重複して配信されます。たとえば、メールが[email protected]に送信され、foo @ mydomain.comがcc:edの場合、2回配信されます。 Postfix FAQ によると、Postfixはグループを拡張せずに並行して電子メールを送信するため、これは仕様によるものであり、sendmailよりも高速になります。これで問題はなくなりましたが、電子メールを送信する前に重複する受信者を実際に削除するようにPostfixを構成することはできますか?
同じ問題を抱えているネット上の人々からの投稿をたくさん見つけましたが、まだ答えを見つけることができていません。 Postfixでこれを行うことができない場合、途中でそれを行うことは可能ですか?ユーザーの教育を試みたが、それは私が恐れているのはかなり無駄だ...
Mac OS X Server 10.6でpostfixを実行しています。amavisはcontent_filterとして設定され、dovecotはmailbox_commandとして設定されています。 procmailをsmtp配信用のcontent_filterとして設定しようとしました(以下の提案に従って)が、それを正しく行うことができないようです。さまざまな理由で、標準のOS X構成を置き換えることはできません。つまり、postfix、amavis、dovecotはそのままです。ただし、必要に応じて追加できます。
Postfixは構造化されているため、重複メールについては何も知りません。配信エージェントとしてprocmailを使用することで、提案したことを実行できます。
基本的に、クライアントから送信される各メッセージは、一意のメッセージIDで配信される必要があります。複数の人に配信される場合、メッセージIDは同じであるため、Message-Id
ヘッダーを確認して破棄し、そのリストに一致する将来のヘッダーを破棄します。
から http://novosial.org/procmail/
:0 Wh: msgid.lock
| formail -D 8192 ~/.procmail/msgid.cache
方法はありますが、Postfix自体は使用しません。
かなり最近のDovecotをPigeonhole implementation of Sieveで使用している場合、配信時の重複排除に使用できる特別な拡張機能があります。 2.2.18より前のDovecotでは、この拡張子の名前は "vnd.dovecot.duplicate"であり、新しいリリースではデフォルトで無効になっています拡張は「複製」と呼ばれ、すでに有効になっているはずですが、明示的に有効にしても害はありません。
/ etc/dovecot/conf.d/90-sieve.conf:
plugin {
sieve = ~/.dovecot.sieve
sieve_dir = ~/sieve
sieve_before = /mnt/mail/users/global_sieve/deduplicate.sieve
# sieve_before2 = /mnt/mail/users/global_sieve/antispam.sieve
sieve_extensions = +vnd.dovecot.duplicate # for dovecot < 2.2.18
#sieve_extensions = +duplicate # for dovecot >= 2.2.18
}
次に、重複排除自体を処理するSieveスクリプトを作成します(ファイル名は必要に応じて調整できます)。
/ mnt/mail/users/global_sieve/deduplicate.sieve:
require "vnd.dovecot.duplicate"; # for dovecot < 2.2.18
# require "duplicate"; # for dovecot >= 2.2.18
if duplicate {
discard;
stop;
}
sievecを使用してスクリプトをコンパイルし、dovecotユーザーがスクリプトを読み取れるようにします。 Dovecotのドキュメントの詳細
Cyrusを使用している場合は、suppress_duplicates = yes
を使用して有効にできる 重複メッセージ配信抑制 機能があります。
私のために働く解決策はadd -o receive_override_options=no_address_mappings
オン master.cf
ここにドキュメント: http://www.postfix.org/postconf.5.html#receive_override_options
enable_original_recipient=no
私はそれを私のmain.cfに入れ、それはうまくいきましたが、私のドメインから送信されたメールに対してのみです。ドメイン外からメールを送信した場合でも重複があります(たとえば、yahooから私のドメインへ)。
これは、いくつかの古いpostfixのFAQからのものです。
Postfixが重複メールを送信する一部の人々はPostfixが重複メッセージを送信することに不満を言うでしょう。これは、同じユーザーに到達する複数のアドレスに1つのメッセージが送信されるたびに発生します。そのようなシナリオの例は次のとおりです。
1つのメッセージがユーザーとユーザーをリストするエイリアスに送信されます。ユーザーはメールのコピーを1通直接受信し、エイリアス経由で1通受信します。
- ユーザーをリストする複数のエイリアスに1つのメッセージが送信されます。ユーザーは、エイリアスごとにメールのコピーを1つ受信します。
これは「正しい」行動であるとさえ主張する人もいます。それはおそらく、より多くの期待と慣れの問題です。
これはPostfixを遅くすることによってのみ "修正"できます。上記の例では、Postfixは配信を開始する前にすべての配布リストを完全に展開する必要があります。設計上、Postfixはメールを異なる宛先に並行して配信し、ローカル配信も例外ではありません。これがPostfixがsendmailよりも高速になる理由です。
したがって、設計上、その動作を確認しています。おそらく、重複するメッセージIDを取り除くことができるコンテンツフィルターを見つけた場合は、配信イベント後にこれを排除できます。
Sendmailはすべてを最初に展開し、重複を取り除くため、この問題はありません。
公式のソリューションはこちらです。 http://osdir.com/ml/mail.postfix.devel/2007-05/msg00010.html
duplicate_filter_limit(10000)aliases(5)またはvirtual(5)エイリアス拡張、またはshowq(8)キュー表示の受信者重複フィルターによって記憶されるアドレスの最大数(以前のPostfixリリースではデフォルトの制限は1000でした)。
duplicate_filter_style(strict)重複する受信者フィルターポリシー:strictまたはpragmatic。