내가 작성한 시브(sieve) 스크립트가 있는 dovecot2 메일 서버에 문제가 있습니다. 스크립트는 메일링 리스트에서 들어오는 메일을 폴더로 자동으로 이동해야 합니다(목록 ID가 아닌 목록 이름 기준).
require ["fileinto", "mailbox", "variables", "regex"];
if exists "list-id" {
if header :regex "list-id" "([a-zA-Z0-9][a-zA-Z0-9-_. ]+[a-zA-Z0-9.])" {
fileinto :create "${1}";
stop;
}
}
헤더가 있는 메일의 경우
List-Id: RZ Monitoring <rz-monitoring.lists.example.com>
이 스크립트는 모든 메일을 "RZ Monitoring" 폴더로 이동해야 합니다. 그런데 어떤 이유에서인지 모든 메일이 받은편지함에 쌓여가고 있습니다.
스크립트가 실행되고 있으며 로그에 오류가 없으므로 스크립트 자체에 실수가 있었던 것 같습니다.
답변1
그만큼비둘기장 체 문서이에 대해 명확하지 않습니다. RFC를 자세히 조사해야 할 것 같습니다. 하지만 연산자는 exists
대소문자를 구분하지만 :regex
그렇지는 않습니다. 따라서 List-Id
다음 대신 사용해야 합니다 list-id
.
if exists "List-Id" {
if header :regex "List-Id" "([a-zA-Z0-9][a-zA-Z0-9-_. ]+[a-zA-Z0-9.])" {
fileinto :create "${1}";
stop;
}
}
답변2
그래서 다음이 작동했습니다.
require ["fileinto", "mailbox", "variables", "regex"];
if exists "List-Id" {
if header :regex "List-Id" "([a-zA-Z0-9][a-zA-Z0-9\\-_. ]+[a-zA-Z0-9.])" {
fileinto :create "${1}";
stop;
}
}
Andrew Schulman이 지적한 것처럼 "존재"는 대소문자를 구분하는 것 같습니다. 이 문제를 해결한 후 로그에 오류가 발생했습니다. 정규식에서
([a-zA-Z0-9][a-zA-Z0-9-_. ]+[a-zA-Z0-9.])
^
이 "-"는 "9"에서 "_"까지의 범위로 해석됩니다. 이는 유효하지 않습니다(정규식에 대한 제가 이해하는 한 유효하지 않습니다. 아마도 비둘기장 정규식 구현의 특이한 점일 수 있습니다). 따라서 여기서 "-"는 이스케이프되어야 합니다.
([a-zA-Z0-9][a-zA-Z0-9\\-_. ]+[a-zA-Z0-9.])