У меня есть псевдонимы, настроенные в postfix, например следующие:
all@mydomain.com: foo@mydomain.com, bar@mydomain.com ...
Когда электронное письмо отправляется на адрес all@mydomain.com, и любым из получателей в этом псевдониме является cc: ed, что довольно часто (то есть: «Ответить всем»), электронное письмо доставляется в двух экземплярах. Например, если электронное письмо отправлено на all@mydomain.com, а foo@mydomain.com - cc: ed, оно будет доставлено дважды. Согласно Postfix FAQ, это сделано намеренно, поскольку Postfix отправляет электронную почту параллельно без расширения групп, что делает его быстрее, чем sendmail. Теперь все в порядке, но можно ли настроить Postfix на удаление повторяющихся получателей перед отправкой электронной почты?
Я нашел много сообщений от людей по всей сети, в которых есть одна и та же проблема, но мне еще предстоит найти ответ. Если это невозможно сделать в Postfix, возможно ли это где-нибудь в пути? Я пробовал обучать своих пользователей, но, боюсь, это бесполезно ...
Я использую postfix на Mac OS X Server 10.6, amavis установлен как content_filter, а dovecot установлен как mailbox_command. Я пробовал настроить procmail в качестве content_filter для доставки smtp (согласно предложению ниже), но я не могу понять это правильно. По разным причинам я не могу заменить стандартную конфигурацию OS X, то есть postfix, amavis и dovecot остаются на месте. Однако я могу добавить к нему, если хочу.
Есть способ, как это сделать, но без использования самого Postfix.
Если вы используете достаточно свежую версию Dovecot с Pigeonhole реализация Sieve, есть специальное расширение, которое можно использовать для дедупликации при доставке. В Dovecot старше 2.2.18 имя этого расширение - "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
}
Затем создайте скрипт сита для обработки самой дедупликации (вы можете изменить имя файла по своему усмотрению).
/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;
}
Скомпилируйте скрипт, используя сито и убедитесь, что скрипт доступен для чтения голубятня пользователь. Подробнее в документации Dovecot.
Если вы используете Cyrus, есть подавление доставки дублирующихся сообщений функция, которую можно включить с помощью suppress_duplicates = yes
.
Postfix не знает о повторяющихся письмах из-за своей структуры. Можно делать то, что вы предлагаете, используя procmail в качестве агента доставки.
По сути, каждое сообщение, поступающее от клиента, должно доставляться с уникальным идентификатором сообщения. Если сообщение доставляется нескольким людям, идентификатор сообщения должен быть одинаковым, поэтому мы сохраняем все Message-Id
заголовки, которые мы видели и отбрасывали, и будущие, соответствующие этому списку.
Из http://novosial.org/procmail/
:0 Wh: msgid.lock
| formail -D 8192 ~/.procmail/msgid.cache
Решение, которое работает для меня, - добавить -o receive_override_options=no_address_mappings
на master.cf
Вот документ: http://www.postfix.org/postconf.5.html#receive_override_options
Это из некоторых старых часто задаваемых вопросов по postfix:
Postfix отправляет повторяющиеся сообщения. Некоторые люди будут жаловаться, что Postfix отправляет повторяющиеся сообщения. Это происходит, когда одно сообщение отправляется по нескольким адресам, которые достигают одного и того же пользователя. Примеры таких сценариев:
Одно сообщение отправляется пользователю и псевдониму, в котором указан этот пользователь. Пользователь получает одну копию письма напрямую и одну копию через псевдоним.
- Одно сообщение отправляется нескольким псевдонимам, в которых указан пользователь. Пользователь получает по одной копии письма через каждый псевдоним.
Некоторые люди даже будут утверждать, что это «правильное» поведение. Вероятно, это больше вопрос ожидания и того, к чему вы привыкли.
Это можно «исправить», только сделав Postfix медленнее. В приведенных выше примерах Postfix сначала должен полностью развернуть все списки рассылки перед началом любой доставки. По замыслу Postfix доставляет почту по разным адресатам параллельно, и локальная доставка не исключение. Вот почему Postfix может быть быстрее sendmail.
Так что по дизайну вы наблюдаете такое поведение. Возможно, если вы найдете фильтр содержимого, который может удалять повторяющиеся идентификаторы сообщений, вы сможете устранить это после события доставки.
Sendmail не имеет этой проблемы, потому что он сначала расширяет все и удаляет дубликаты.
Официальное решение здесь .. http://osdir.com/ml/mail.postfix.devel/2007-05/msg00010.html
duplicate_filter_limit (10000) Максимальное количество адресов, запоминаемых фильтрами дубликатов получателя для псевдонимов (5) или виртуального (5) расширения псевдонимов, или для отображения очереди showq (8) (в более ранних выпусках Postfix ограничение по умолчанию было 1000).
duplicate_filter_style (strict) Политика фильтрации дублирующихся получателей: строгая или прагматичная.
enable_original_recipient=no
Я поместил это в свой main.cf, и он работал нормально, но только для почты, отправленной с моего домена. У меня все еще есть дубликаты, если я отправляю электронное письмо из-за пределов своего домена (например, Yahoo на мой домен).
источник : http://article.gmane.org/gmane.mail.postfix.user/119783