이름에 공백 문자가 포함된 사서함으로 메일을 배달하도록 (cyr) 어떻게 알 수 있습니까?

이름에 공백 문자가 포함된 사서함으로 메일을 배달하도록 (cyr) 어떻게 알 수 있습니까?

나는 오랫동안 Cyrus imapd를 실행해 왔고 일반적으로 잘 작동합니다. 이제 처음으로 cyrdeliver(Cyrus imapd에 포함된 MDA)를 사용하여 이름에 공백 문자가 포함된 사서함의 하위 폴더로 메일을 배달해야 하는 상황에 처하게 되었습니다. 나는 몇 시간 동안 이 문제를 해결하려고 노력했지만 성공하지 못했습니다.

테스트 목적으로 사용자를 생성 ton_pp하고 해당 사용자의 받은 편지함에 두 개의 하위 폴더를 생성했습니다. 이러한 하위 폴더의 이름은 Health및 입니다 Health Reports. cyradm 목록 액세스 권한을 사용하여 두 폴더에 동일한 IMAP 권한이 있는지 확인하십시오.

localhost> lam user/ton_pp*
user/ton_pp:
  ton_pp lrswipkxtecda
  cyrus lrswipkxtecda
user/ton_pp/INBOX/Health:
  cyrus lrswipkxtecda
  ton_pp lrswipkxtecda
user/ton_pp/INBOX/Health Reports:
  cyrus lrswipkxtecda
  ton_pp lrswipkxtecda

다음 내용으로 테스트 메시지를 만들었습니다.

root@morn ~ # cat testmessage
From: [email protected]
To: [email protected]
Subject: Test message

This is a test message.

내가 실행할 때

/usr/sbin/cyrdeliver -a cyrus -m INBOX/Health ton_pp < testmessage

테스트 메시지는 사용자 Health의 하위 폴더에 즉시 나타납니다. 지금까지는 너무 좋았습니다. 그것이 제가 바라던 것입니다.INBOXton_pp

Health Reports그러나 (대신) 하위 폴더로 동일한 작업을 수행하려고 하면 Health오류 메시지가 나타납니다.

root@morn ~ # /usr/sbin/cyrdeliver -a cyrus -m "INBOX/Health Reports" ton_pp < testmessage
ton_pp+INBOX/Health Reports: Bad protocol

(셸이 분할되는 것을 방지하려면 메일함 폴더 이름을 따옴표로 묶어야 합니다.)

이로 인해 더 철저하게 조사하게되었습니다. 먼저 코드를 공부했어요mbox2사이러스, Cyrus imapd에 대한 cyrdeliver메시지 mbox형식을 지정 하는 데 사용됩니다. 코드는 이해하기 쉽습니다. 151~154행은 다음과 같습니다.

# Escape spaces in folder names for cyrdeliver. (Otherwise cyrdeliver
# will exit with the error "Bad protocol").
$subfolder =~ s/ /\\ /g;
$subfolder =~ s/,/\\,/g;

쉼표의 특별한 의미는 잘 모르겠지만 폴더 이름에 백슬래시를 추가하여 공백 문자를 인용하는 것만으로도 충분하다는 것을 분명히 알 수 있습니다. 이렇게 하면 오류 메시지가 사라집니다.

root@morn ~ # /usr/sbin/cyrdeliver -a cyrus -m "INBOX/Health\ Reports" ton_pp < testmessage
root@morn ~ #

그러나 cyrdeliver메시지는 이제 자동으로 삭제되거나 내가 찾을 수 없는 곳에 배치되어 INBOX하위 폴더에도 표시되지 않습니다.

그런 다음 IMAP을 조사하기 시작했습니다.RFC3501(특히 형식 구문 및 메일함 이름 지정에 관한 장), 특수 문자(예: 공백 문자)가 포함된 메일함 이름은 큰따옴표로 묶어야 한다는 인상을 받았습니다. 즉, 큰따옴표는 cyrdeliver추가에 전달되어야 합니다. 시도하면 오류 메시지가 다시 나타납니다.

root@morn ~ # /usr/sbin/cyrdeliver -a cyrus -m '"INBOX/Health\ Reports"' ton_pp < testmessage
ton_pp+"INBOX/Health\ Reports": Bad protocol
root@morn ~ # /usr/sbin/cyrdeliver -a cyrus -m '"INBOX/Health Reports"' ton_pp < testmessage
ton_pp+"INBOX/Health\ Reports": Bad protocol

분명히 공백 문자를 인용하는 것(또는 인용하지 않는 것)은 아무 것도 바꾸지 않습니다. 인용되지 않은 사서함/사용자 이름과 인용된 "하위 폴더" 이름을 혼합하는 것이 문제가 될 수 있다고 의심하여 ​​다음과 같이 구문적으로 다르지만 의미적으로 동일한 대안을 시도했습니다 man deliver.

root@morn ~ # /usr/sbin/cyrdeliver -a cyrus -m "user/ton_pp/INBOX/Health Reports" < testmessage
+user/ton_pp/INBOX/Health Reports: Bad protocol
root@morn ~ # /usr/sbin/cyrdeliver -a cyrus -m "user/ton_pp/INBOX/Health\ Reports" < testmessage
+user/ton_pp/INBOX/Health\ Reports: Mailbox does not exist
root@morn ~ # /usr/sbin/cyrdeliver -a cyrus -m '"user/ton_pp/INBOX/Health\ Reports"' < testmessage
+"user/ton_pp/INBOX/Health\ Reports": Bad protocol
root@morn ~ # /usr/sbin/cyrdeliver -a cyrus -m '"user/ton_pp/INBOX/Health Reports"' < testmessage
+"user/ton_pp/INBOX/Health Reports": Bad protocol

그래서 이것은 아무것도 개선하지 않습니다.

나도 하나 찾았어Cyrus Man 웹사이트의 일부 정보그리고 @이 FAQ에서 문자를 다루는 것과 같은 방식으로 공백 문자를 다루도록 노력하세요. 즉, \\\위의 테스트를 반복하지 않고 사용했습니다 \. 다시 말하지만, 이 방법은 작동하지 않으며 "사서함이 존재하지 않습니다" 또는 "프로토콜 오류" 오류가 발생합니다.

이제 나는 완전히 갇혔습니다. 누구든지 나를 도와줄 수 있나요? 하위 폴더 이름에 공백이 있는 경우 cyrdeliver하위 폴더로 메시지를 가져오려면 어떻게 해야 합니까?INBOX

관련 정보