mutt: 현재 이메일의 로컬 경로를 결정합니다.

mutt: 현재 이메일의 로컬 경로를 결정합니다.

도전

현재 mutt에서 보고 있는 메일의 로컬 경로를 확인하고 메일을 로컬 프로젝트 폴더에 저장하기 전이나 후에 bash 스크립트로 전송하고 싶습니다.

개념

나는 영구적인 인터넷 연결의 필요성으로부터 내 메일 인프라를 분리하기 위해 을 사용 mutt하고 있습니다. 이 작업을 수행할 때 메일 파일 구조에서 내 메시지를 찾았는데, 각 메시지 는 아마도 자체 로컬 폴더 구조에 있을 것입니다.offlineimapmsmtp<PROJECT><ACCOUNT>

Mail/
|-- <PROJECT>/
|   |-- cur/
|   |   |-- 1584016380.RPi-18:2,
|   |   |-- 1595241604.RPi-18:2,
|   |   |-- 1603636018.RPi-18:2,
|   |   `-- 1612159655.RPi-18:2,
|   |-- new/
|   `-- tmp/
|-- <ACCOUNT>/
|   |-- DRAFTS/
|   |   |-- cur/
|   |   |-- new/
|   |   `-- tmp/
|   |-- INBOX/
...

메일을 탐색할 때(mutt의 인덱스 또는 호출기 보기 사용) 스케치 폴더 구조에서 mutt가 읽는 해당 메일 요소를 선택, 표시, 삭제 등을 할 수 있습니다.

이제 mutt의 함수를 사용하여 현재 메시지를 저장하고 싶습니다 save-message. 하지만 그 전에(또는 저장한 후에) 이메일의 첨부 파일을 자동으로 추출하고 이메일 내용에 대해 다른 작업을 수행하고 싶습니다.

~/Mail/<PROJECT>/cur/1584016380.RPi-18:2메일 파일의 경로(예 : 매개변수)를 읽은 다음 명령을 사용하여 미리 정의된 위치에 메일 첨부 파일을 저장 하는 bash 스크립트를 작성했습니다 mu.

질문

나는 현재 보고 있는 메일 파일의 실제 위치를 알려주는 모든 것을 찾기 위해 사용 가능한 mutt 변수( folder, spoolfile, , ...)를 조사했습니다. from하지만 아무것도 찾을 수 없습니다. 그래서 로컬에서 메일을 찾을 수 있도록 bash 스크립트에 어떤 경로를 전달해야 할지 모르겠습니다.

여기서 사용할 수 있는 것이 있나요?

답변1

이 질문이 꽤 커지고 해결하려면 질문 아래 댓글에서 토론이 필요하기 때문에 답변을 작성하기로 결정했습니다.

알겠어요프로젝트발신자, 제목 또는 본문 내용에 따라 다릅니다.

여기에는 두 개의 매크로가 필요합니다.Neomutt는 매크로 키를 누르면 파일을 추가하는 명령을 실행합니다.

첫 번째 매크로는 작업을 수행하며 별도의 파일에 있어야 합니다. 셸 부분이 매크로 정의를 확장하기 때문입니다. 그렇기 때문에 첫 번째 매크로의 두 번째 매크로를 정의하여 다시 정의하고 실행해야 합니다.

~/.mutt/dynamic_macro

"<pipe-message>/path/to/your/script<enter>\
<save-message>`cat /tmp/mutt_project`<enter>" \
"pipe message to extract attachments and save message"

~/.mutt/muttrc

macro index ,S \
"<enter-command>source ~/.mutt/dynamic_macro<enter>\
<enter-command>push ,s<enter>" \
"redefine macro and run it"

/path/to/your/script이제 작동하지 않는 의사코드(bash와 유사한) 예가 있습니다. 스크립트는 표준 입력에서 메시지를 읽고 헤더나 본문을 구문 분석하여 결정합니다.프로젝트이름(사서함 이름)을 지정하고 부분을 반복하여 첨부 파일을 저장합니다. 항목별로 특정 디렉터리 및 하위 디렉터리에 저장할 수도 있습니다.

detect_project(){
  # parse $content to detect project from body/headers
  # save the project name to /tmp/mutt_project for the 1st macro
  # and output on stdout for save_attachemnts()
  echo $result > /tmp/mutt_project
  echo $result
}

save_attachments(){
  # parse $content, iterate over parts of message from $content,
  # extract attachments, decode, save to:
  #/root_directory_with_attachments/$project/$your_filename
}

main(){
  content=$(cat) # read the stdin and save it into variable
  project=$(detect_project)
  save_attachments
}

main

제안:

  1. 이메일 처리를 위한 라이브러리가 있는 언어를 사용하면 이러한 부분에 액세스하고 디코딩할 수 있습니다.
  2. 다른 프로젝트의 여러 메시지에 태그를 지정하려는 경우 위의 예가 태그 접두사에서 작동하지 않을 것이라고 확신합니다. 그 이유는 매크로가 한 번 실행되고 모든 메시지가 즉시 /path/to/your/script로 파이프되지만 매개변수에는 <save-message>마지막 메시지에서 감지된 항목이 포함되기 때문입니다.

다양한 솔루션: mutt에서 neomut으로, mu에서 notmuch로 마이그레이션. Neomutt에는 not much에 대한 뛰어난 지원 기능이 내장되어 있습니다. 여기에 있는 모든 작업은 몇 가지 새로운 후크를 사용하여 수행할 수 있습니다. 사용 사례에 적합하고 백그라운드에서 실행되며 neomutt 매크로가 필요하지 않으며 원래 솔루션 태그 접두사의 제한 사항을 제거합니다. Nomtuch post-new 후크는 메시지가 동기화될 때마다 실행됩니다.

  • 보낸 사람/받는 사람/참조/제목 헤더 본문 콘텐츠 또는 기타 태그를 기반으로 메시지에 태그를 지정할 수 있습니다.
  • 첨부 파일은 post-new 후크를 통해 저장할 수도 있습니다.

관심이 있으신 경우 여기에 의견을 남겨주시면 답변을 확대해 드리겠습니다.

관련 정보