No seu, .muttrc
adicione a seguinte linha:
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\""
Isso mudará o Date:
cabeçalho da mensagem (apenas para exibição) para o fuso horário local se o cabeçalho contiver uma data formatada por RFC válida. Se o formato da data fornecido estiver incorreto (afinal, estamos lidando com entradas não confiáveis do usuário), ele será preservado. Para combater uma possível tentativa de injetar o código do shell no cabeçalho, o sed
padrão implementa uma lista de permissões baseada no RFC 5322 (este RFC define o formato do Date:
campo).
Observe que o mutt
limite da linha de comando não deve ter mais do que 255 caracteres; portanto, otimizei o sed
comando original que tinha uma lista de permissões mais rígida para caber em 255 bytes. Se você planeja fazer outras coisas com a mensagem, o sed
comando completo que você pode colocar em um script é:
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
arquivo. Obrigado!sed
comandos acima dependem doe
modificador para os
comando. Esse modificador é uma extensão GNU e o macOS'essed
é o BSD.A formatação no índice é controlada pela
index_format
configuração - é gerada pelo mutt. ODate
cabeçalho não é controlado pelo mutt, é um cabeçalho incluído na mensagem que apenas é exibida. Se ele mostra a hora UTC, é porque o servidor de envio decidiu usar UTC ao gerar o cabeçalho. A única maneira de alterá-lo é realmente alterar a própria mensagem, quando você a recebe ou quando a exibe.Alterá-lo da forma que ele significa significa adicionar um filtro ao seu agente de entrega de correio, mas ele precisa ser sofisticado o suficiente para analisar o
Date
cabeçalho existente e reescrevê-lo. É quase certamente melhor apenas reformar a mensagem quando você olha para ela. Você pode definir adisplay_filter
propriedade como um arquivo executável e canalizará qualquer mensagem que você abrir através do executável antes de exibi-lo.Você precisará escrever um programa ou script de shell que leia cada linha da mensagem e substitua a linha pelo cabeçalho Date ou encontre um script existente (há um aqui que pode funcionar, embora não pareça realmente necessário envolver um arquivo temporário)
fonte
http://www.mail-archive.com/[email protected]/msg44341.html
Isso sugere o uso do 'pager_format', para mostrar a data da carta no fuso horário local:
defina pager_format = "% 4C% Z% [!% b% e em% I:% M% p]% .20n% s% * - (% P)"
fonte
Seguindo o conselho de Gilles, aqui está uma versão que usa um arquivo temporário e
formail
.fonte
Date:
cabeçalho mal formado - se você entrar em um subshell, precisará validar / higienizar a entrada.Aqui está uma solução procmail:
E exiba LocalDate: no muttrc:
fonte
display_filter
in.muttrc
.set display_filter="/PATH/TO/THIS/PYTHON/FILE"
no seu.muttrc
.Python 3.3:
fonte
Date:
cabeçalho malformado - se você entrar em um subshell, precisará validar / higienizar a entrada, caso contrário, o script está OK do ponto de vista de segurança. No entanto, é bastante pesado para um script executado em todas as mensagens que você navega.Solução Perl obrigatória que preserva o cabeçalho "Data" ao adicionar um cabeçalho "Data local" extra para conter a versão em horário local:
fonte
Eu criei um script de shell, conforme descrito no final da resposta de Michael, que faz o trabalho para mim:
fonte
formail
(parte do pacote procmail ) oureformail
(parte do maildrop ) para extrair oDate:
cabeçalho existente e colocar um novo no lugar. Cuide de casos extremos, como umDate:
cabeçalho ausente ou malformado .