호출기에서 현지 시간대로 날짜 헤더를 표시하도록 mutt를 어떻게 구성합니까?

호출기에서 현지 시간대로 날짜 헤더를 표시하도록 mutt를 어떻게 구성합니까?

호출기에서 메시지를 볼 때 mutt는 날짜 헤더에 현지 시간대 대신 UTC 시간을 표시합니다. 인덱스 보기에는 현지 시간이 올바르게 표시됩니다. 내가 찾은이 오래된 메일링 리스트 게시물화면 하단의 상태 표시줄에 현지 시간을 표시하는 방법을 설명하지만 여전히 화면 상단의 날짜 헤더에 있는 시간이 "수정"되지는 않습니다. 호출기가 날짜 헤더 시간을 현지 시간으로 변환하도록 하는 방법이 있습니까?

답변1

인덱스의 형식은 index_formatmutt에 의해 생성된 설정에 의해 제어됩니다. 헤더는 Datemutt에 의해 제어되지 않으며 방금 표시된 메시지에 포함된 헤더입니다. UTC 시간이 표시되면 송신 서버가 헤더를 생성할 때 UTC를 사용하기로 결정했기 때문입니다. 이를 변경하는 유일한 방법은 메시지를 받거나 볼 때 실제로 메시지 자체를 변경하는 것입니다.

Date이를 변경한다는 것은 메일 배달 에이전트에 필터를 추가하는 것을 의미하지만 기존 헤더를 구문 분석하고 다시 작성할 수 있을 만큼 정교해야 합니다 . 메시지를 볼 때 mutt에서 메시지 형식을 다시 지정하는 것이 거의 확실하게 더 좋습니다. 설정할 수 있습니다display_filter실행 파일에 대한 속성. 메시지를 표시하기 전에 실행 파일을 통해 여는 메시지를 파이프합니다.

메시지의 각 줄을 읽고 해당 줄을 날짜 헤더로 바꾸는 프로그램이나 셸 스크립트를 작성하거나 기존 스크립트를 찾아야 합니다(하나가 있습니다).여기임시 파일을 포함할 필요가 없는 것처럼 보이지만 이것이 효과가 있을 수 있습니다.)

답변2

http://www.mail-archive.com/[이메일 보호됨]/msg44341.html

이는 현지 시간대로 알파벳 날짜를 표시하도록 "pager_format"을 사용하는 것을 제안합니다.

pager_format="%4C %Z %[!%b %e at %I:%M %p] %.20n %s%* -- (%P)" 설정

답변3

.muttrc다음 줄을 추가한 후 :

set display_filter="exec sed -r \"s/^Date:\\s*(([F-Wa-u]{3},\\s*)?[[:digit:]]{1,2}\\s+[A-Sa-y]{3}\\s+[[:digit:]]{4}\\s+[[:digit:]]{1,2}:[[:digit:]]{1,2}(:[[:digit:]]{1,2})?\\s+[+-][[:digit:]]{4})/date +'Date: %a, %d %b %Y %H:%M:%S %z' -d '\\1'/e\""

Date:메시지 헤더에 유효한 RFC 형식 날짜가 포함되어 있으면 메시지 헤더(표시 전용)가 현지 시간대로 변경됩니다. 제공된 날짜가 올바른 형식이 아닌 경우(결국 신뢰할 수 없는 사용자 입력을 처리하는 경우) 해당 날짜는 유지됩니다. 헤더를 통해 셸 코드를 삽입하려는 시도를 방지하기 위해 이 sed모드는 필드 형식을 정의하는 RFC 5322를 기반으로 화이트리스트를 구현합니다 Date:.

mutt명령줄 길이는 255자로 제한되어 있으므로 255바이트에 맞도록 더 엄격한 화이트리스트를 사용하여 원래 명령을 최적화 했습니다 sed. 메시지로 다른 작업을 수행하려는 경우 sed스크립트에 넣을 수 있는 전체 명령은 다음과 같습니다.

sed -r "s/^Date:\s*(((Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s*)?[[:digit:]]{1,2}\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+[[:digit:]]{4}\s+[[:digit:]]{1,2}:[[:digit:]]{1,2}(:[[:digit:]]{1,2})?\s+[+-][[:digit:]]{4})/date +'Date: %a, %d %b %Y %H:%M:%S %z' -d '\1'/e"

답변4

Gilles의 제안에 따라 임시 파일과 formail.

#!/bin/bash
TMPFILE=$(mktemp)

# save the message to a file
cat - >"$TMPFILE"
# extract the date header
DATE=$( formail -xDate: < "$TMPFILE" )
# convert to the current timezone (defined by TZ)
DATE=$( date -R -d "$DATE" )
# output the modified message
echo "Date: $DATE"
formail -fI Date < "$TMPFILE"
# clean up
rm -f "$TMPFILE"

관련 정보