Это не совсем тривиально, но есть некоторые строительные блоки, которые могут вам пригодиться.
Вы можете определить, получили ли вы сообщение, сохранив кэш видимого идентификатора сообщения: s. Это стандартная методика, описанная в procmailex
man page более подробно. Я бы предложил использовать ту же технику, чтобы решить, где подать входящее сообщение; если он не был замечен раньше, доставьте его в свой почтовый ящик; в противном случае - файл в папку списка.
Блокировка становится несколько более сложной, потому что вам необходимо получить файл блокировки перед входом в рецепт formail -D
. Это можно сделать, используя специальную переменную LOCKFILE
.
# Is this message addressed both to yourself and to the list?
:0
* ^[email protected]\.net\>
* ^[email protected]\.example\.org\>
{
# Select regular inbox as default target for this message
dest=$DEFAULT
# Lock msgid.lock for exclusive access to msgid.cache
LOCKFILE=msgid.lock
# If message-id is already cached, override $dest
:0
* H ? formail -D 8192 msgid.cache
{ dest=listbox/ }
# Release lock
LOCKFILE=
# Deliver to $dest
:0
$dest
}
Это не 100% надежная защита. Если вы получаете Bcc:
, например, ваш собственный адрес не будет в заголовках, и поэтому ^TO_
себя не будет соответствовать.