W swoim .muttrc
dodaj następujący wiersz:
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\""
Spowoduje to zmianę Date:
nagłówka w komunikacie (tylko do wyświetlania) na lokalną strefę czasową, jeśli nagłówek zawierał prawidłową datę sformatowaną w formacie RFC. Jeśli podany format daty był niepoprawny (w końcu mamy do czynienia z niezaufanymi danymi użytkownika), zostanie on zachowany. Aby zwalczyć ewentualną próbę wstrzyknięcia kodu powłoki przez nagłówek, sed
wzorzec implementuje białą listę opartą na RFC 5322 (ta RFC określa format Date:
pola).
Zauważ, że mutt
limit linii poleceń nie może być dłuższy niż 255 znaków, dlatego zoptymalizowałem oryginalne sed
polecenie, które miało ściślejszą białą listę, aby zmieściło się w 255 bajtach. Jeśli planujesz robić inne rzeczy z wiadomością, wtedy pełne sed
polecenie, które możesz umieścić w skrypcie, to:
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
pliku. Dzięki!sed
polecenia polegają nae
modyfikatorzes
polecenia. Ten modyfikator jest rozszerzeniem GNU, a macOSsed
to BSD.Formatowanie indeksu jest kontrolowane przez
index_format
ustawienie - jest generowane przez mutt.Date
Nagłówek nie jest kontrolowana przez kundla, to nagłówek zawarte z przesłaniem, że po prostu zostanie wyświetlony. Jeśli pokazuje czas UTC, to dlatego, że serwer wysyłający zdecydował się użyć UTC podczas generowania nagłówka. Jedynym sposobem, aby to zmienić, jest faktyczna zmiana samej wiadomości, zarówno po jej otrzymaniu, jak i wyświetleniu.Zmieniając go w momencie, w jakim się pojawia, oznacza dodawanie filtra do agenta dostarczającego pocztę, ale musi on być wystarczająco wyrafinowany, aby przeanalizować istniejący
Date
nagłówek i przepisać go. Prawie na pewno lepiej jest po prostu przeformatować wiadomość, gdy na nią patrzysz. Możesz ustawićdisplay_filter
właściwość na plik wykonywalny, a on wyświetli każdą wiadomość otwieraną przez plik wykonywalny przed jego wyświetleniem.Musisz napisać program lub skrypt powłoki, który odczytuje każdy wiersz wiadomości i zastępuje go nagłówkiem Date, lub znajduje istniejący skrypt (jest tu jeden , który może działać, chociaż nie wydaje się, że powinien konieczne jest włączenie pliku tymczasowego)
źródło
http://www.mail-archive.com/[email protected]/msg44341.html
Sugeruje to użycie „pager_format”, aby wyświetlał datę litery w lokalnej strefie czasowej:
ustaw pager_format = "% 4C% Z% [!% b% e przy% I:% M% p]% .20n% s% * - (% P)"
źródło
Korzystając z rad Gillesa, oto wersja, która używa pliku tymczasowego i
formail
.źródło
Date:
nagłówek - jeśli przejdziesz do podpowłoki, musisz sprawdzić / odkazić dane wejściowe.Oto rozwiązanie procmail:
I wyświetl LocalDate: in muttrc:
źródło
display_filter
w.muttrc
.set display_filter="/PATH/TO/THIS/PYTHON/FILE"
w twoim.muttrc
.Python 3.3:
źródło
Date:
nagłówek - jeśli przejdziesz do podpowłoki, musisz sprawdzić poprawność / odkazić dane wejściowe, w przeciwnym razie skrypt jest OK z punktu widzenia bezpieczeństwa. Jest to jednak dość trudne dla skryptu, który działa przy każdej przeglądanej wiadomości.Obowiązkowe rozwiązanie Perla, które zachowuje nagłówek „Data”, a jednocześnie dodaje dodatkowy nagłówek „Data lokalna”, który zawiera wersję czasu lokalnego:
źródło
Zrobiłem skrypt powłoki, jak opisano na końcu odpowiedzi Michaela, która wykonuje dla mnie zadanie:
źródło
formail
(część pakietu procmail ) lubreformail
(część zrzutu poczty ), aby wyodrębnić istniejącyDate:
nagłówek i umieścić nowy na miejscu. Zadbaj o przypadki krawędzi, takie jak brakujący lub źle sformatowanyDate:
nagłówek.