Quando premo S
in mutt, salva la posta in un formato di cartella di posta ( cur/ tmp/ new/
), ma voglio salvare un singolo file, proprio come il modo in cui gli allegati vengono salvati.
È configurabile?
Quando premo S
in mutt, salva la posta in un formato di cartella di posta ( cur/ tmp/ new/
), ma voglio salvare un singolo file, proprio come il modo in cui gli allegati vengono salvati.
È configurabile?
Risposte:
Il messaggio effettivo viene visualizzato anche come allegato, quindi è possibile salvarlo dall'elenco degli allegati. Dall'indice o dal messaggio stesso, premi vper aprire gli allegati e ssalvare
Il s
comando salva in una cassetta postale, che per te è in formato maildir. Sfortunatamente, non esiste alcun comando di salvataggio su file, forse perché nel formato storico mbox, una cassetta postale che contiene una singola posta è solo un file contenente quella posta.
A tale scopo è possibile utilizzare il mutt
comando pipe-message (collegamento predefinito |
). Apre una riga di comando e tu scrivi cat > DESIRED-FILE-PATH
.
L'opzione "pipe-decode" controlla cosa succede alle intestazioni e alle parti mime quando si salva un messaggio in questo modo.
Si potrebbe probabilmente scrivere una macro per questa funzionalità.
set pipe_decode=yes
al mio muttrc era ciò di cui Kai von Fintel stava scrivendo.
=
fare questo.
Se si è touch
un file e quindi si tenta di salvare o copiare un messaggio in esso, mutt lo utilizzerà come mbox.
Inoltre potresti voler usare copia invece di salvare. Mutt presume che un messaggio di posta elettronica debba esistere in una sola copia e il salvataggio di un messaggio in un'altra cassetta postale lo eliminerà dal primo, mentre la copia farà una copia corretta.
La risposta di Kai von Fintel funziona perfettamente, ma ho pensato di condividere una macro per semplificare questo processo.
Innanzitutto, in muttrc
:
macro index,pager S "| ~/.local/bin/file_email /tmp<enter>"
Questo reindirizza l'email completa (inclusi intestazioni e allegati) al seguente script. Crea un file eseguibile su ~/.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"
Questo script salva il file nel primo argomento (ovvero muttrc
nell'esempio sopra, l'e-mail verrà salvata in /tmp
). Il formato del nome del file è YYMMDD SUBJECT.eml
. Si converte anche /
in ∕
per impedire la creazione di sottodirectory.
formail
nello script?
formail
, quindi ho letto. Tuttavia, non sono del tutto sicuro di quale parte della mia sceneggiatura ti riferissi? Stai usando formail
per estrarre soggetto e data? Se è così, probabilmente una bella idea. Ti esorto a scrivere una risposta; Lo voterei sicuramente.
Ho provato tutte le risposte suggerite ma non sono riuscito a salvare l'e-mail grezza, multipart (text / plain + text / html) da salvare in un file, comprese le intestazioni e tutto il resto. Ne avevo bisogno per alimentare il mio filtro antispam con l'e-mail per insegnargli che una determinata posta è spam o no ...
La soluzione che ho trovato è premendo e
(cioè "modifica messaggio") sul messaggio aperto, che apre il messaggio non elaborato nel tuo editor preferito. Raw qui significa che ottieni il messaggio esattamente come è arrivato in mutt, quindi hai tutte le intestazioni e tutti i byte che compongono il messaggio.
Dopo aver colpito e
, scrivo semplicemente il buffer (ho impostato l'editor su VIM ) su un file :w <path_to_file>/<file_name>
e basta.
PS: avrei aggiunto questo come commento ma per farlo è necessario un certo livello di reputazione. Inoltre, so che la domanda è molto antica, ma poiché il neomutt è ancora usato da molte persone, ho pensato che questo potesse aiutare qualcuno.
Aggiornamento: ho trascurato l' pipe-decode
opzione di cui parlava Kai. Con quell'opzione impostata correttamente avrebbe funzionato anche tramite |
. Anche la mia soluzione funziona anche ;-)