Salvataggio di e-mail come file in mutt?


28

Quando premo Sin 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:


23

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


Solo una nota: se il tuo messaggio di posta elettronica contiene allegati, il salvataggio della prima voce dall'elenco degli allegati salverà il messaggio, ma senza gli allegati inclusi all'interno.
sdaau,

3
Un'altra nota: questo non salva nessuna intestazione, inclusi mittente, destinatario e oggetto.
Sparhawk,

31

Il scomando 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 muttcomando 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à.


Bene, questo può salvare anche le intestazioni, ma per ora, userei la strada di Michael, grazie!
margherita

1
Funziona bene e fornisce un modo efficiente per salvare oltre 50 e-mail (usando la codifica di corrispondenza dei modelli) su file. Ho dovuto scavare un po 'per scoprire che aggiungendo set pipe_decode=yesal mio muttrc era ciò di cui Kai von Fintel stava scrivendo.
Screenack

inoltre, questo salva anche gli allegati nel file di posta elettronica esportato.
sdaau,

va bene, ma vedo interruzioni di linea non elaborate nel =fare questo.
Jack Wasey il

Eccezionale. Questo ha funzionato alla grande per me. Volevo solo estrarre più di 20 e-mail da un Maildir obsoleto. Saluti!
Prageeth il

10

Se si è touchun 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.


1
Avevo bisogno di ottenere il messaggio con le intestazioni complete per incollarlo in uno script di test del filtro e questo ha funzionato perfettamente.
Soren Bjornstad,

2

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 muttrcnell'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.


Non sarebbe più facile da usare formailnello script?
0andriy,

@ 0andriy Non ho familiarità formail, quindi ho letto. Tuttavia, non sono del tutto sicuro di quale parte della mia sceneggiatura ti riferissi? Stai usando formailper estrarre soggetto e data? Se è così, probabilmente una bella idea. Ti esorto a scrivere una risposta; Lo voterei sicuramente.
Sparhawk,

0

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-decodeopzione di cui parlava Kai. Con quell'opzione impostata correttamente avrebbe funzionato anche tramite |. Anche la mia soluzione funziona anche ;-)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.