스크립트의 "메일"에서 읽지 않은 가장 오래된 메시지를 가져오는 방법은 무엇입니까?

스크립트의 "메일"에서 읽지 않은 가장 오래된 메시지를 가져오는 방법은 무엇입니까?

지금 작성을 끝내려고 하는 스크립트에서는 현재 사용자의 사서함에서 읽지 않은 가장 오래된 메시지를 가져와야 합니다(특히 해당 항목의 제목 줄이 필요합니다).

가장 오래된 메시지를 추출한 후 보관을 위해 다른 사용자에게 전달해야 합니다.

어떻게 추출할 수 있나요?오직bash 또는 Python의 정보?

사용하면 더 좋겠죠?제목 줄을 파일로 추출한 다음 메시지를 전달하고 스크립트에서 파일을 처리하도록 하시겠습니까? 그렇다면 어떻게 해야 합니까?

답변1

기존 시스템에서는 정의에 따라 mbox첫 번째 메시지는 읽지 않았으며 사용 가능한 가장 오래된 메시지입니다./var/mail/you

formail -zxSubject: -1 -s </var/mail/you

메시지를 파일로 추출하고(편리하게 메시지를 전달할 수 있도록) 헤더를 추출하려면 Subject:다음과 같이 시도하십시오.

tmp=$(maketemp -t findoldestunread.XXXXXXXX) || exit 127
trap 'rm -f $tmp' EXIT   # remove temp file when done
trap 'exit 1' 1 2 3 5 15 # remove also in case of error / interruption
formail -1 -s </var/mail/you >"$tmp"
formail -zxSubject: <"$tmp"
sendmail -oi [email protected] <"$tmp"

Maildir에서는 상황이 약간 더 복잡합니다. 새 메시지는 에 임시 저장된 tmp후 로 이동됩니다 cur. 파일 이름은 플래그를 나타냅니다.그 많은 말로S, 쉼표 뒤의 문자 가 아닌 끝 부분에 쉼표가 포함된 파일 이름을 찾습니다 .

find path/to/Maildir/cur -maxdepth 1 -type f \
    -regex '.*,[^S,]*$' -printf '%C@ %p\n' |
sort | sed '1s/^[^ ]* //;q' | xargs formail -zxSubject:

형식 printf지정자는 정렬을 용이하게 하기 위해 타임스탬프를 먼저 인쇄합니다. 정렬하고, 첫 번째 행을 잡고, 타임스탬프를 다듬고, 헤더를 formail추출하기 위해 피드합니다. Subject:(개행 문자 등이 포함된 펑키한 파일 이름이 있는 경우 분명히 문제가 발생할 수 있습니다. 이 문제를 해결할 수 있는 방법이 있지만 여기서는 게으르고 실용적입니다.)

이 경우 파일 이름만 인쇄하는 리팩토링은 간단해야 합니다. 파이프를 제거하고 xargs출력을 변수에 캡처하기만 하면 됩니다.

일부 Maildir 구현에는 일종의 색인이 있어 파일 시스템의 전체 편지함을 순회하는 것보다 이 작업을 더 쉽고 빠르게 할 수 있지만, 어떤 구현을 사용하고 있는지에 대해 더 자세히 알지 못하면 이는 단지 추측일 뿐입니다. 그 순간.

귀하의 이메일이 이러한 형식 중 하나가 아닌 경우 (이상한 것 같습니다) 더 자세한 내용으로 질문을 업데이트해야 합니다.

귀하의 인용문은 mail귀하가 전통적인 Berkeley 시스템을 사용하고 있음을 암시 mbox하지만 버전이 많고 그 중 일부는 다소 난해합니다.

답변2

mail명령은 비대화식으로 사용하여 받은 편지함에 있는 이메일 목록을 인쇄할 수 있습니다.

mail -H | head -1
>U     1  [email protected] Tue Apr 29 14 08:13 18/774    "Subject of mail"

답변3

이메일 전달 형식에는 최소한 세 가지가 있습니다. 어떤 것을 사용하고 있는지 아는 것이 도움이 됩니다.

formail메일 파일을 읽고 건너뛰기 및 전체 옵션을 사용하여 특정 메시지의 헤더를 출력할 수 있습니다. 이는 메시지가 알려진 파일로 전달되었다고 가정합니다. 모든 메시지를 보관하고 싶다면 이 도구가 적합한 도구가 될 것입니다.

procmail메시지가 도착하면 보관하는 것이 좋습니다. 배송 시 사본을 다른 주소로 보내도록 쉽게 구성할 수 있습니다. 메일 잠금을 방지하고 특정 유형의 메시지를 건너뛰는 몇 가지 표준 방법이 있습니다.

관련 정보