ポケットベルでメッセージを表示すると、muttは日付ヘッダーにローカルタイムゾーンの代わりにUTC時間を表示します。インデックスビューには現地時間が正しく表示されます。私が見つけたこの古いメーリングリストの投稿画面下部のステータスバーに現地時間を表示する方法について説明しますが、画面上部の日付ヘッダーにある時間はまだ「修正」されません。ページャに日付ヘッダ時間を現地時間に変換させる方法はありますか?
答え1
インデックスの形式は、index_format
muttによって生成された設定によって制御されます。ヘッダーはDate
muttによって制御されず、表示されたばかりのメッセージに含まれるヘッダーです。これは、UTC時間が表示された場合、送信サーバーがヘッダーを生成するときにUTCを使用することを決定したためです。これを変更する唯一の方法は、メッセージを受信または表示するときに実際にメッセージ自体を変更することです。
Date
これを変更することは、メール配信エージェントにフィルタを追加することを意味しますが、既存のヘッダーを解析して再構築するのに十分洗練する必要があります。メッセージを表示するときに mutt でメッセージ形式を再指定する方がほぼ確実です。設定できますdisplay_filter
実行可能ファイルの属性。メッセージを表示する前に、実行可能ファイルを介して開くメッセージをパイプします。
メッセージの各行を読み取り、その行を日付ヘッダーに置き換えるプログラムまたはシェルスクリプトを作成するか、既存のスクリプトを見つける必要があります(1つあります)。ここ一時ファイルを含める必要はないようですが、これがうまくいく可能性があります。)
答え2
http://www.mail-archive.com/[Eメール保護]/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"