Dans votre, .muttrc
ajoutez la ligne suivante:
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\""
Cela changera l'en- Date:
tête du message (pour l'affichage uniquement) en votre fuseau horaire local si l'en-tête contenait une date au format RFC valide. Si le format de date fourni était incorrect (nous avons affaire à des entrées utilisateur non fiables après tout), il sera conservé. Pour lutter contre une éventuelle tentative d'injection du code shell à travers l'en-tête, le sed
modèle implémente une liste blanche basée sur le RFC 5322 (ce RFC définit le format du Date:
champ).
Notez que mutt
limite la ligne de commande à pas plus de 255 caractères, j'ai donc optimisé la sed
commande d' origine qui avait une liste blanche plus stricte pour tenir dans 255 octets. Si vous prévoyez de faire autre chose avec le message, alors la sed
commande complète que vous pouvez mettre dans un script est:
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
dossier. Merci!sed
commandes ci-dessus dépendent due
modificateur de las
commande. Ce modificateur est une extension GNU et macOSsed
est celui de BSD.Le formatage dans l'index est contrôlé par le
index_format
paramètre - il est généré par mutt. L'en-Date
tête n'est pas contrôlé par mutt, c'est un en-tête inclus avec le message qui vient d'être affiché. S'il affiche l'heure UTC, c'est que le serveur d'envoi a décidé d'utiliser UTC lors de la génération de l'en-tête. La seule façon de le modifier consiste à modifier réellement le message lui-même, soit lorsque vous le recevez, soit lorsque vous le consultez.Le modifier au fur et à mesure de son entrée signifie ajouter un filtre à votre agent de distribution de courrier, mais il doit être suffisamment sophistiqué pour analyser l'en-
Date
tête existant et le réécrire. Il est presque certainement préférable de simplement reformater le message lorsque vous le regardez. Vous pouvez définir ladisplay_filter
propriété sur un fichier exécutable, et il dirigera tout message que vous ouvrez via l'exécutable avant de l'afficher.Vous devrez écrire un programme ou un script shell qui lit chaque ligne du message et remplace celle par l'en-tête Date, ou trouver un script existant (il y en a un ici qui pourrait fonctionner, bien qu'il ne semble pas qu'il devrait vraiment être nécessaire pour impliquer un fichier temporaire)
la source
http://www.mail-archive.com/[email protected]/msg44341.html
Cela suggère d'utiliser le 'pager_format', pour lui faire afficher la date de la lettre dans le fuseau horaire local:
set pager_format = "% 4C% Z% [!% b% e à% I:% M% p]% .20n% s% * - (% P)"
la source
En suivant les conseils de Gilles, voici une version qui utilise un fichier temporaire et
formail
.la source
Date:
tête mal formé - si vous allez dans un sous-shell, vous devez valider / assainir l'entrée.Voici une solution procmail:
Et afficher LocalDate: dans muttrc:
la source
display_filter
in.muttrc
.set display_filter="/PATH/TO/THIS/PYTHON/FILE"
dans votre.muttrc
.Python 3.3:
la source
Date:
tête mal formé - si vous entrez dans un sous-shell, vous devez valider / nettoyer l'entrée, sinon le script est OK du point de vue de la sécurité. Cependant, il est assez lourd pour un script qui s'exécute sur chaque message que vous parcourez.Solution Perl obligatoire qui préserve l'en-tête "Date" tout en ajoutant un en-tête "Local-Date" supplémentaire pour contenir la version locale:
la source
J'ai fait un script shell comme décrit à la fin de la réponse de Michael qui fait le travail pour moi:
la source
formail
(une partie du package procmail ) oureformail
(une partie de maildrop ) pour extraire l'en-Date:
tête existant et en mettre un nouveau en place. Prenez soin des cas marginaux tels qu'un en-Date:
tête manquant ou mal formaté.