Di .muttrc
tambahkan Anda baris berikut:
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\""
Ini akan mengubah Date:
header dalam pesan (hanya untuk tampilan) ke zona waktu lokal Anda jika header berisi tanggal diformat RFC yang valid. Jika format tanggal yang diberikan salah (kami berhadapan dengan input pengguna yang tidak dipercaya) itu akan dipertahankan. Untuk mengatasi kemungkinan upaya untuk menyuntikkan kode shell melalui header, sed
pola mengimplementasikan daftar putih berdasarkan RFC 5322 (RFC ini mendefinisikan format Date:
bidang).
Catatan yang mutt
membatasi baris perintah tidak lebih dari 255 karakter, maka saya mengoptimalkan sed
perintah asli yang memiliki daftar putih lebih ketat untuk masuk ke 255 byte. Jika Anda berencana melakukan hal-hal lain dengan pesan tersebut, maka sed
perintah lengkap yang dapat Anda masukkan ke dalam skrip adalah:
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"
filter.sed
file saya . Terima kasih!sed
perintah di atas bergantung padae
pengubah kes
perintah. Pengubah itu adalah ekstensi GNU dan macOS'essed
adalah BSD.Pemformatan dalam indeks dikendalikan oleh
index_format
pengaturan - itu dihasilkan oleh mutt. TheDate
header tidak dikendalikan oleh mutt, itu header disertakan dengan pesan yang hanya akan ditampilkan. Jika ini menunjukkan waktu UTC itu karena server pengirim memutuskan untuk menggunakan UTC ketika membuat header. Satu-satunya cara untuk mengubahnya adalah dengan benar-benar mengubah pesan itu sendiri, baik ketika Anda menerimanya atau ketika Anda melihatnya.Mengubahnya saat datang berarti menambahkan filter ke agen pengiriman surat Anda, tetapi perlu cukup canggih untuk mem-parsing
Date
header yang ada dan menulis ulang. Ini hampir pasti lebih baik untuk hanya memformat ulang pesan ketika Anda melihatnya. Anda dapat mengaturdisplay_filter
properti ke file yang dapat dieksekusi, dan itu akan mengirimkan pesan apa pun yang Anda buka melalui file yang dapat dieksekusi sebelum menampilkannya.Anda harus menulis skrip program atau shell yang membaca setiap baris pesan dan menggantikannya dengan header Tanggal, atau menemukan skrip yang ada (ada satu di sini yang mungkin berfungsi, meskipun sepertinya tidak seharusnya benar-benar diperlukan untuk melibatkan file sementara)
sumber
http://www.mail-archive.com/[email protected]/msg44341.html
Ini menyarankan menggunakan 'pager_format', untuk membuatnya menampilkan tanggal surat di zona waktu lokal:
set pager_format = "% 4C% Z% [!% b% e pada% I:% M% p]% .20n% s% * - (% P)"
sumber
Mengambil saran Gilles, inilah versi yang menggunakan file temp dan
formail
.sumber
Date:
header yang salah bentuk - jika Anda masuk ke subkulit Anda perlu memvalidasi / membersihkan input.Berikut ini adalah solusi procmail:
Dan tampilkan LocalDate: dalam muttrc:
sumber
display_filter
dalam.muttrc
.set display_filter="/PATH/TO/THIS/PYTHON/FILE"
di Anda.muttrc
.Python 3.3:
sumber
Date:
header yang salah bentuk - jika Anda masuk ke subkulit Anda perlu memvalidasi / membersihkan input, jika tidak skrip OK dari sudut pandang keamanan. Namun, ini cukup berat untuk skrip yang berjalan pada setiap pesan yang Anda telusuri.Solusi Perl Wajib yang mempertahankan header "Date" sambil menambahkan header "Local-Date" tambahan untuk memuat versi localtime:
sumber
Saya membuat skrip shell seperti yang dijelaskan pada akhir jawaban Michael yang melakukan pekerjaan untuk saya:
sumber
formail
(bagian dari paket procmail ) ataureformail
(bagian dari maildrop ) untuk mengekstrakDate:
header yang ada dan meletakkan yang baru di tempatnya. Jaga kasus tepi sepertiDate:
header yang hilang atau salah format .