이메일을 파일로 저장 하시겠습니까?


28

Smutt를 누르면 메일을 메일 폴더 형식 ( cur/ tmp/ new/)으로 저장하지만 첨부 파일을 저장하는 방법과 마찬가지로 단일 파일을 저장하려고합니다.

구성 할 수 있습니까?

답변:


23

실제 메시지도 첨부 파일로 표시되므로 첨부 파일 목록에서 저장할 수 있습니다. 색인 또는 메시지 자체 v에서 첨부 파일을 열고 s저장하려면 누르 십시오.


참고 사항 : 전자 메일 메시지에 첨부 파일이 포함 된 경우 첨부 파일 목록에서 첫 번째 항목 만 저장하면 메시지가 저장되지만 첨부 파일은 안에 포함되지 않습니다.
sdaau

3
또 다른 참고 사항 : 발신자, 수신자 및 제목을 포함한 헤더는 저장하지 않습니다.
Sparhawk

31

s명령은 maildir 형식의 사서함에 저장됩니다. 불행히도, 파일에 저장 명령은 없습니다. 이전 mbox 형식에서 단일 메일을 포함하는 메일 상자는 해당 메일을 포함하는 파일 일뿐입니다.

이를 위해 mutt명령 파이프 메시지 (기본 바로 가기 |)를 사용할 수 있습니다. 명령 행이 열리고 작성 cat > DESIRED-FILE-PATH합니다.

"pipe-decode"옵션은이 방법으로 메시지를 저장할 때 헤더 및 MIME 파트에 발생하는 상황을 제어합니다.

아마도이 기능에 대한 매크로를 작성할 수있을 것입니다.


멋지다. 이것은 헤더도 저장할 수 있지만 지금은 Michael의 방법을 사용할 것입니다. 감사합니다!
데이지

1
이는 잘 작동하며 50 개 이상의 이메일 (패턴 일치 태그 지정 사용)을 파일로 저장하는 효율적인 방법을 제공합니다. 나는 set pipe_decode=yes내 muttrc 에 추가함으로써 Kai von Fintel이 쓴 것이 무엇인지 찾기 위해 조금 파야했다 .
Screenack

또한 첨부 파일을 내 보낸 전자 메일 파일에 저장합니다.
sdaau

이것은 괜찮지 만이 작업을 =수행하면 처리되지 않은 줄 바꿈 이 나타납니다.
Jack Wasey

대단해 이것은 나를 위해 잘 작동했습니다. 구식 Maildir에서 20 개 이상의 이메일을 추출하고 싶었습니다. 건배!
prageeth

10

당신이 경우 touch똥개는 MBOX로 사용하는 파일은 다음 저장하려고하거나 메시지를 복사합니다.

또한 저장 대신 복사를 사용하고 싶을 수도 있습니다. Mutt는 메일이 한 사본에만 존재해야하며 다른 메일함에 메시지를 저장하면 첫 번째 메일에서 메일을 삭제하고 복사는 올바른 사본을 수행한다고 가정합니다.


1
필터 테스트 스크립트에 붙여 넣으려면 전체 헤더가있는 메시지를 가져와야 완벽하게 작동했습니다.
Soren Bjornstad

2

Kai von Fintel답변 은 완벽하게 작동하지만이 프로세스를 간소화하기 위해 매크로를 공유한다고 생각했습니다.

첫째로 muttrc:

macro index,pager S "| ~/.local/bin/file_email /tmp<enter>"

그러면 전체 이메일 (헤더 및 첨부 파일 포함)을 다음 스크립트로 파이프합니다. 에 실행 파일을 작성하십시오 ~/.local/bin/file_email.

#!/usr/bin/env bash
# Save piped email to "$1/YYMMDD SUBJECT.eml"

# Don't overwrite existing file
set -o noclobber

message=$(cat)

mail_date=$(<<<"$message" grep -oPm 1 '^Date: ?\K.*')
formatted_date=$(date -d"$mail_date" +%y%m%d)
# Get the first line of the subject, and change / to ∕ so it's not a subdirectory
subject=$(<<<"$message" grep -oPm 1 '^Subject: ?\K.*' | sed 's,/,∕,g')

if [[ $formatted_date == '' ]]; then
  echo Error: no date parsed
  exit 1
elif [[ $subject == '' ]]; then
  echo Warning: no subject found
fi

echo "${message}" > "$1/$formatted_date $subject.eml" && echo Email saved to "$1/$formatted_date $subject.eml"

이 스크립트는 파일을 첫 번째 인수에 저장합니다 (예 muttrc: 위 의 예에서 이메일은에 저장 됨 /tmp). 파일 이름의 형식은입니다 YYMMDD SUBJECT.eml. 또한 서브 디렉토리 작성을 막기 위해 로 변환 /합니다 .


formail스크립트에서 사용하기가 쉽지 않습니까?
0andriy

@ 0andriy 나는 익숙하지 않아서 formail읽었습니다. 그러나 내 스크립트 중 어느 부분을 언급했는지 확실하지 않습니다. formail주제와 날짜를 추출하는 데 사용 하십니까? 그렇다면 아마도 좋은 생각 일 것입니다. 답을 쓰도록 촉구합니다. 확실히 찬성했습니다.
Sparhawk

0

제안 된 모든 답변을 시도했지만 헤더, 모든 것을 포함하여 원시 멀티 파트 (텍스트 / 일반 + 텍스트 / HTML) 전자 메일을 파일에 저장할 수 없습니다. 특정 메일이 스팸인지 아닌지를 알려주기 위해 스팸 필터에 전자 메일을 제공하려면이 기능이 필요했습니다.

내가 찾은 해결책 e은 열린 메시지를 누르면 (예 : "메시지 편집") 선택한 편집기에서 원시 메시지 를 엽니 다 . 여기서 Raw는 메시지가 mutt에 도착한 그대로 전달되므로 메시지를 구성하는 모든 헤더와 모든 바이트가 있음을 의미합니다.

을 친 후에 e는 버퍼를 ( 파일 을 vim으로 설정 ) 파일에 작성 :w <path_to_file>/<file_name>하면됩니다.

추신 : 나는 이것을 주석으로 추가했을 것이지만 이것을하기 위해서는 어느 정도의 명성이 필요합니다. 또한 질문이 매우 오래 되었다는 것을 알고 있지만 많은 사람들이 여전히 neomutt 를 사용하기 때문에 누군가에게 도움이 될 것이라고 생각했습니다.

업데이트 :pipe-decode Kai가 말한 옵션을 간과했습니다 . 해당 옵션을 올바르게 설정하면을 통해 작동했을 것 |입니다. 여전히 내 솔루션도 작동합니다. ;-)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.