제가 일하는 곳에서는 종종 여러 그룹에 이메일을 보냅니다. 즉, 새 그룹이 스레드에 추가되면 이메일이 스레드 내에서도 임의의 디렉터리로 필터링된다는 의미입니다. 메일을 보내는 모든 그룹 폴더의 모든 이메일을 보고 싶습니다. 이는 더 많은 디스크 공간을 사용한다는 의미이지만 디스크 공간이 저렴합니다. 이에 대한 "c" 플래그가 있지만 문제는 각 규칙에 "c"를 추가하면 각 이메일을 해당 폴더와 마지막 받은 편지함에 넣게 된다는 것입니다. 그래서 저는 이 이메일이 특정 폴더에서 인식/필터링되었는지 식별하고, 그렇지 않은 경우 받은 편지함으로 들어갈 수 있도록 하는 마지막 규칙을 원합니다. "test -z $LASTFOLDER"를 사용해 보았는데 작동하는 것 같았습니다. 단, procmail이 fetchmail 실패를 반환하여 imap 서버에서 내 이메일을 삭제하지 않았고 혼란이 발생했다는 점만 제외하면 됩니다. 올바른 접근 방식은 무엇이며 메일 필터링에 다른 방법을 사용해야 합니까? 내가 원하는 것을 명확하게 쓸 수 있나요?
답변1
메시지를 목록 폴더로 정렬하는 모든 규칙에 대해 비슷한 작업을 수행할 수 있습니다.
:0
* ^List-Id:...
{
:0 c:
somefolder
:0 fw
| formail -a X-Chad-Loop: Chad was here
}
그리고 끝나기 직전에:
:0
* ^X-Chad-Loop:\ Chad\ was\ here
{
:0
/dev/null
HOST
}
나생각하다에 대한 전달도 기록됩니다 /dev/null
. 마음에 들지 않으면 을(를) 플레이해야 합니다 LOGABSTRACT
.
참고로, procmail
오랫동안 유지 관리되지 않았으며 잘 알려진 보안 문제가 있다는 점을 참고하시기 바랍니다. 일부 기존 개발자조차도 이제 대신 다른 것을 사용하도록 제안하고 있습니다. 그만한 가치가 있다는 점에서 내 개인적인 취향은주파수 분할 다중화, 그의 안전 기록이 훨씬 좋습니다.
답변2
이 LASTFOLDER
아이디어는 완벽하게 괜찮습니다. 호출 프로세스에 실패 신호를 보내지 않는지 확인하기만 하면 됩니다. 코드를 표시하지는 않지만 다음과 같이 하면 정상적으로 작동합니다.
:0
* LASTFOLDER ?? .
/dev/null
이 variable ?? regex
구문은 변수 확인을 위한 Procmail의 내장 도구입니다. 단일 점은 빈 문자열(또는 기술적으로는 줄 바꿈만 포함하는 문자열)을 제외한 모든 값과 일치합니다.