postfix 에서 중복된 메일 수신 관련

glayneon의 이미지


postfix 2.3.3 에 centos 5.4 x86_64 버전을 사용중입니다.

현재 aliases 로 메일 그룹을 관리하고 있는데, A란 사용자가 A 메일 그룹 뿐 아니라, B 메일 그룹에도 들어 있습니다.

이 경우 A, B 그룹에 메일을 보내면 A란 사용자는 메일을 두 번 받습니다.

메일 그룹에 여러번 들어 있더라도, 메일은 한번만 받게 하고 싶습니다.

구글링으로 찾아 봤는데.. postfix 의 동작 방식이 그러하므로, 방법이 없다는 결론이였습니다.

고로 postfix 의 content filter 를 만들어서 써보라는 얘기와 procmail 을 파보라는 얘기 등..

context filter 의 경우는 몇번 작성해 보았지만, 이 경우는 어떻게 만들어야 될지 좀 감이 안오고..

procmail은 잘 모릅니다. ㅜ,.ㅠ

혹 저처럼 비슷한 경우를 겪어서 해결하신 경우가 있는지 궁금합니다.

아님 좋은 아이디어라도 부탁드립니다. (_ _)

glayneon의 이미지

context filter 로 중복 이름 체크를 재귀적으로 처리해서 메일이 한번만 날라가게 수정해볼 예정입니다.

lusilis의 이미지

작년에 제가 적은 글을 보는듯한 느낌입니다.

저도 동일한 문제로 KLDP에 글을 올려봤었는데 별다른 방법이 없었던지라 우선은 그냥 두고 있는 상태입니다. orz

혹시라도 해결 기미가 보이신다면 좋은 결과 기대해보겠습니다. +ㅅ+)

jmjeong의 이미지

Postfix의 FAQ에 있는 질문 중에 하나입니다. 그런데 막상 찾아보니 또 찾기가 쉽지 않더군요. :-)
postfix의 설계 자체가 그렇게 설계 되어 있는 것은 맞는데, procmail또는 maildrop 등을 이용하여 해결하실 수 있습니다.
수신 받는 쪽에서 각 개인별로 Message-ID를 저장한다음, 다음 메일이 왔을 때 앞쪽의 cache값과 비교하여 중복된 메일을 filtering하는 방법입니다.

/etc/posttfix/master.cf에

maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}

/etc/postfix/main.cf 항목에

maildrop_destination_recipient_limit=1
virtual_transport = maildrop

maildrop transport를 활성화 한다음...

/etc/maildroprc 에서

VERBOSE="9"

DEFAULT="$HOME/$LOGNAME"
exception {
xfilter "/usr/bin/reformail -D 163840 $DEFAULT/msgid.cache"
}
exception {
include "$HOME/mailfilters/$LOGNAME"
}

reformail 을 통해서 filtering 하실 수 있습니다.

reformail - Detecting duplicate messages

The -D option implements a simple way to delete duplicate messages in incoming mail. filename is a file that will be approximately 'len' bytes long. This file will be used by reformail to save message IDs seen in recent mail. reformail reads the message on standard input. If the message has a Message-ID: header that's already in the cache file, reformail terminates with the exit code set to 0. Otherwise, reformail terminates with the exit code set to 1.

lusilis의 이미지

해당 문제에 대한 해결법을 찾을 당시 이 방법을 적용해 봤었는데 제 경우는 실패 했습니다.

다만 방법의 문제가 아니라 구동 환경의 차이라 생각 됩니다.

$DEFAULT로 잡힌 경로가 실제 사용자 홈디렉토리를 보게 되는데 제 경우는 ldap 연동을 통해 실제 사용자가 존재하지를 않습니다.

/var/mail/USERID 형식으로만 유저별 디렉토리가 존재하고 있는데 다시 한번 살펴봐야 될 것 같습니다. 'ㅡ')