Respostas:
A mensagem real também aparece como anexo, para que você possa salvá-la da lista de anexos. No índice ou na própria mensagem, pressione vpara abrir os anexos e ssalvar
O s
comando salva em uma caixa de correio, que para você está no formato maildir. Infelizmente, não há comando para salvar em arquivo, talvez porque no formato histórico da mbox, uma caixa de correio que contenha um único e-mail seja apenas um arquivo que contenha esse e-mail.
O mutt
comando pipe-message (atalho padrão |
) pode ser usado para isso. Abre uma linha de comando e você escreve cat > DESIRED-FILE-PATH
.
A opção "decodificação de canal" controla o que acontece com os cabeçalhos e as partes mime quando você salva uma mensagem dessa maneira.
Provavelmente, poderia-se escrever uma macro para essa funcionalidade.
set pipe_decode=yes
ao meu muttrc, era sobre o que Kai von Fintel estava escrevendo.
=
fazer isso.
Se você tiver touch
um arquivo e tentar salvar ou copiar uma mensagem para ele, o mutt o usará como uma mbox.
Além disso, você pode querer usar copiar em vez de salvar. Mutt assume que um email deve existir apenas em uma cópia e salvar uma mensagem em outra caixa de correio a excluirá da primeira, enquanto a cópia fará uma cópia adequada.
A resposta de Kai von Fintel funciona perfeitamente, mas eu pensei em compartilhar uma macro para otimizar esse processo.
Em primeiro lugar, em muttrc
:
macro index,pager S "| ~/.local/bin/file_email /tmp<enter>"
Isso canaliza o email completo (incluindo cabeçalhos e anexos) para o script a seguir. Crie um arquivo executável em ~/.local/bin/file_email
.
#!/usr/bin/env bash
# Save piped email to "$1/YYMMDD SUBJECT.eml"
# Don't overwrite existing file
set -o noclobber
message=$(cat)
mail_date=$(<<<"$message" grep -oPm 1 '^Date: ?\K.*')
formatted_date=$(date -d"$mail_date" +%y%m%d)
# Get the first line of the subject, and change / to ∕ so it's not a subdirectory
subject=$(<<<"$message" grep -oPm 1 '^Subject: ?\K.*' | sed 's,/,∕,g')
if [[ $formatted_date == '' ]]; then
echo Error: no date parsed
exit 1
elif [[ $subject == '' ]]; then
echo Warning: no subject found
fi
echo "${message}" > "$1/$formatted_date $subject.eml" && echo Email saved to "$1/$formatted_date $subject.eml"
Este script salva o arquivo no primeiro argumento (ou seja, no muttrc
exemplo acima, o email será salvo em /tmp
). O formato do nome do arquivo é YYMMDD SUBJECT.eml
. Também é convertido /
em ∕
para impedir a criação de subdiretórios.
formail
o script?
formail
, então eu tive uma leitura. No entanto, não tenho certeza de qual parte do meu script você estava se referindo? Usando formail
para extrair assunto e data? Se assim for, provavelmente uma boa ideia. Exorto você a escrever uma resposta; Eu definitivamente votaria.
Eu tentei todas as respostas sugeridas, mas não foi possível salvar o e-mail bruto, com várias partes (texto / sem formatação + texto / html) em um arquivo, incluindo os cabeçalhos e tudo mais. Eu precisava disso para alimentar meu filtro de spam com o email para ensiná-lo, que um email específico é spam ou não ...
A solução que encontrei foi pressionar e
(ou seja, "editar mensagem") na mensagem aberta, que abre a mensagem bruta no seu editor de escolha. Raw aqui significa que você recebe a mensagem exatamente como chegou em mutt, para ter todos os cabeçalhos e todos os bytes que compõem a mensagem.
Depois de bater e
, apenas escrevo o buffer (defino o editor como vim ) em um arquivo :w <path_to_file>/<file_name>
e é isso.
PS: Eu adicionaria isso como comentário, mas você precisa de um certo nível de reputação para fazer isso. Além disso, eu sei que a pergunta é muito antiga, mas como o neomutt ainda é usado por muitas pessoas, achei que isso poderia ajudar alguém.
Atualização: eu ignorei a pipe-decode
opção que Kai estava falando. Com essa opção definida corretamente |
, também funcionaria. Ainda minha solução está funcionando também ;-)