Fügen .muttrc
Sie folgende Zeile hinzu:
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\""
Dadurch wird der Date:
Header in der Nachricht (nur zur Anzeige) in Ihre lokale Zeitzone geändert, wenn der Header ein gültiges Datum im RFC-Format enthielt. Wenn das angegebene Datumsformat falsch war (es handelt sich immerhin um nicht vertrauenswürdige Benutzereingaben), wird es beibehalten. Um einem möglichen Versuch, den Shell-Code durch den Header sed
einzufügen, entgegenzuwirken, implementiert das Muster eine auf RFC 5322 basierende Whitelist (diese RFC definiert das Format des Date:
Felds).
Beachten Sie, dass mutt
die Befehlszeile nicht länger als 255 Zeichen ist. Daher habe ich den ursprünglichen sed
Befehl optimiert, der eine strengere Whitelist für 255 Bytes enthält. Wenn Sie vorhaben, andere Aktionen mit der Nachricht auszuführen, können Sie den folgenden vollständigen sed
Befehl in ein Skript einfügen:
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
Akte aufnehmen. Vielen Dank!sed
Befehle beruhen auf deme
Modifikator für dens
Befehl. Dieser Modifikator ist eine GNU-Erweiterung und macOS'essed
ist die BSD- Erweiterung .Die Formatierung im Index wird von der
index_format
Einstellung gesteuert - sie wird von mutt generiert. DerDate
Header wird nicht von mutt gesteuert, sondern ist ein Header, der in der gerade angezeigten Nachricht enthalten ist. Wenn die UTC-Zeit angezeigt wird, hat der sendende Server beim Generieren des Headers entschieden, UTC zu verwenden. Die einzige Möglichkeit, diese zu ändern, besteht darin, die Nachricht selbst zu ändern, entweder wenn Sie sie empfangen oder wenn Sie sie anzeigen.Wenn Sie den Posteingang ändern, müssen Sie Ihrem E-Mail-Zustellungsagenten einen Filter hinzufügen. Dieser muss jedoch so ausgefeilt sein, dass der vorhandene
Date
Header analysiert und neu geschrieben werden kann. Es ist mit ziemlicher Sicherheit besser, wenn Mutt die Nachricht beim Betrachten neu formatiert. Sie können diedisplay_filter
Eigenschaft auf eine ausführbare Datei festlegen. Jede Nachricht, die Sie öffnen, wird durch die ausführbare Datei geleitet, bevor sie angezeigt wird.Sie müssen ein Programm oder ein Shell-Skript schreiben, das jede Zeile der Nachricht liest und die Zeile durch den Date-Header ersetzt, oder ein vorhandenes Skript suchen ( hier könnte eines funktionieren, obwohl es eigentlich nicht so zu sein scheint notwendig sein, um eine temporäre Datei einzubeziehen)
quelle
http://www.mail-archive.com/[email protected]/msg44341.html
Dies schlägt vor, das 'pager_format' zu verwenden, um das Datum des Buchstabens in der lokalen Zeitzone anzuzeigen:
set pager_format = "% 4C% Z% [!% b% e bei% I:% M% p]% .20n% s% * - (% P)"
quelle
Nach Gilles 'Rat ist hier eine Version, die eine temporäre Datei und verwendet
formail
.quelle
Date:
Header. Wenn Sie in eine Subshell wechseln, müssen Sie die Eingabe validieren / bereinigen.Hier ist eine Procmail-Lösung:
Und zeige LocalDate: in muttrc an:
quelle
display_filter
in zu.muttrc
.set display_filter="/PATH/TO/THIS/PYTHON/FILE"
in deinem.muttrc
.Python 3.3:
quelle
Date:
Header. Wenn Sie in eine Subshell wechseln, müssen Sie die Eingabe validieren / bereinigen. Andernfalls ist das Skript aus Sicherheitsgründen in Ordnung. Für ein Skript, das für jede Nachricht ausgeführt wird, die Sie durchsuchen, ist es jedoch ziemlich schwer.Obligatorische Perl-Lösung, die den "Date" -Header beibehält, während ein zusätzlicher "Local-Date" -Header hinzugefügt wird, der die localtime-Version enthält:
quelle
Ich habe ein Shell-Skript erstellt, wie am Ende von Michaels Antwort beschrieben, das die Arbeit für mich erledigt:
quelle
formail
(Teil des procmail- Pakets) oderreformail
(Teil von maildrop ) zu verwenden, um den vorhandenenDate:
Header zu extrahieren und einen neuen zu platzieren. Achten Sie auf Randfälle wie fehlende oder falschDate:
formatierte Header.