Postfixエイリアスと重複した電子メール、修正方法


18

次のようなエイリアスをpostfixに設定しています:

all@mydomain.com:    foo@mydomain.com, bar@mydomain.com ...

電子メールがall@mydomain.comに送信され、そのエイリアスの受信者のいずれかがcc:edである場合(これは非常に一般的です(つまり、「全員に返信」))、電子メールは重複して配信されます。たとえば、電子メールがall@mydomain.comに送信され、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構成を置き換えることはできません。つまり、接尾辞、amavis、およびdovecotはそのままです。ただし、必要に応じて追加できます。


私は...それは本当に可能ではないと思う
アントワーヌBenkemoun

私はあなたが正しいアントワーヌであると本当に信じ始めています。
マーカススタッド

報奨金の無駄だったまあ...
マーカススタッド

2
これに対する解決策を見つけましたか?私は同じ問題を抱えています。
トミーアーノルド14

回答:


4

Postfixは構造化されているため、メールの重複については知りません。procmailを配信エージェントとして使用することで、提案されていることを実行できます。

基本的に、クライアントからの各メッセージは、一意のメッセージIDで配信される必要があります。複数の人に配信される場合、Message-Idは同じである必要があります。そのためMessage-Id、表示して破棄したヘッダーと、そのリストに一致する将来のヘッダーを保存します。

http://novosial.org/procmail/から

:0 Wh: msgid.lock
| formail -D 8192 ~/.procmail/msgid.cache

問題を正しく理解した場合、Postfixは電子メールを並行して送信するため、Postfixで解決することはできません。つまり、all @ mydomain.comを展開すると同時にfoo@mydomain.comに送信します。 foo@mydomain.comに送信します。Procmailソリューションは、問題の2つの電子メールの間に別の無関係な電子メール(異なるメッセージIDを持つ)が送信される競合状態を導入し、キャッシュを上書きして重複した電子メールを作成する可能性はありませんとにかく配信?
マーカススタッド

私はあなたの提案を機能させようとしていますが、これをデフォルトでOS X 10.5+で使用されているdovecot配信と組み合わせる方法がわかりません。
マーカススタッド

dovecotを配信エージェントとして使用している場合は、procmailを使用content_filterして、グローバルレベルで同じタスクを実行できるようになります
フィリップレイノルズ

私はおそらくここで私の頭の上に邪魔されていることを告白する必要があります。私は自分の指が出血するまで、postfixとgooglingの構成パラメーターのページを盲目に見てきましたが、これを構成する方法がわかりません。あなたが知っているかもしれないリソースや正しい方向へのナッジは本当にありがたいです!
マーカススタッド

私はそれが今どのように機能するかをある程度理解していると思いますが、すでにamavisに設定されたcontent_filterがあります。これは、ある種のアンチウイルスチェッカーのようです。content_filtersをチェーン化することは可能だと読みましたが、それはかなり直感的ではなく、ドキュメンテーションは素晴らしいものではありません。重複した電子メールを排除するのがどれほど難しいかは本当にばかげています。設計の設計に関係なく、これは箱から出してすぐに使用できるように、または少なくともこれらのmonstruosハックを必要としないように思えます。
マーカススタッド

3

方法はありますが、Postfix自体は使用しません。

SieveのPigeonhole実装で比較的最近のDovecotを使用している場合、配信時の重複排除に使用できる特別な拡張機能があります。2.2.18より古いDovecotでは、この拡張子の名前は「vnd.dovecot.duplicate」であり、デフォルトでは無効になっています。新しいリリースでは、拡張子は「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


このメカニズムを指摘してくれてありがとう。その「干し草の山で針を見つける」感覚。
lkraav

実装中の発見:duplicate拡張機能はユーザーレベルで機能します。中央のfileintoメールボックスでTo / Cc-dの複数のユーザーの重複を停止しようとしていました。これは機能しません。のvirtual_alias_mapsような後置キャッチオールエントリも設定しなければならなかった@domain.com catchall@domain.com場合、sieve重複チェックはcatchallユーザーの重複リストにヒットします。
lkraav

ええ、それは「干し草の山で針を見つける」感覚に非常に似ています
ネットランナー


0

これは、古いpostfixのFAQからのものです。

Postfixが重複メールを送信する一部の人々は、Postfixが重複メッセージを送信すると文句を言うでしょう。これは、同じユーザーに到達する複数のアドレスに1つのメッセージが送信されるたびに発生します。そのようなシナリオの例は次のとおりです。

  • 1つのメッセージがユーザーと、ユーザーをリストするエイリアスに送信されます。ユーザーは、メールの1つのコピーを直接受け取り、エイリアスを介して1つのコピーを受け取ります。

    • ユーザーをリストする複数のエイリアスに1つのメッセージが送信されます。ユーザーは各エイリアスを介してメールのコピーを1つ受け取ります。

一部の人々は、これが「正しい」行動であるとさえ主張するでしょう。おそらく期待と、何に慣れているかという問題でしょう。

これは、Postfixを遅くすることによってのみ「修正」できます。上記の例では、Postfixは配信を開始する前にすべての配布リストを完全に展開する必要があります。設計上、Postfixは異なる宛先に並行してメールを配信し、ローカル配信も例外ではありません。これが、Postfixがsendmailよりも高速になる理由です。

そのため、設計上、その動作を見ています。おそらく、重複したメッセージIDを除去できるコンテンツフィルターを見つけた場合、配信イベント後にこれを削除できます。

Sendmailには、最初にすべてを展開し、重複を取り除くため、この問題はありません。


はい、私はそれを読みました、おそらく私の質問を更新すべきだったでしょう。設計上またはそうでない場合でも、それはまだ問題です。私はなぜそれがそのように振る舞っているのか理解しており、Postfixで解決策を見つけようとするのは無益であることを理解しています。しかし、Procmailを使用してコンテンツフィルターソリューションを考え出したところ、うまくいかないようです。コンテンツフィルターまたはprocmail、あるいはその両方を正しく理解していない可能性が高いです。どちらの場合でも、私はまだこれを修正したいと思います。残念ながら、セットアップはそのままでは変更できず、追加するだけです。残念ながら、接尾辞の代わりにsendmailを使用することはできません。
マーカススタッド

質問をいくつかの情報で更新しましたが、正直なところ、FAQへのリンクが最初からそこにありました。役に立つ提案があれば感謝します!
マーカススタッド

それが同じコンテンツへのリンクであることに気づかなかった。ITセキュリティの仕事をしていると、ランダムリンクをクリックすることにかなり偏執的になります。重複したメッセージのメッセージIDが同じであることを確認できますか?
jeffatrackaid

長い一日だったので、元の投稿を確認する必要がありますが、これについてはどうですか
jeffatrackaid

重複したメッセージが同じメッセージIDを持っていることは確かに確認できます。duplicate_filter_limitを設定しても、残念ながら何の助けにもなりません。
マーカススタッド

0

公式のソリューションはこちらです。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。


1
これは何もしないようです
...-grufftech

postfix.1071664.n5.nabble.com/...はこれが実装されることはなかったと主張
ヤンコ・エルナンデス・アルバレス

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.