Odpowiedzi:
Rzeczywista wiadomość pojawia się również jako załącznik, więc możesz zapisać ją z listy załączników. W indeksie lub w samej wiadomości naciśnij, vaby otworzyć załączniki i szapisać
s
Polecenie zapisuje do skrzynki pocztowej, co dla ciebie jest w formacie Maildir. Niestety, nie ma polecenia zapisu do pliku, być może dlatego, że w historycznym formacie mbox skrzynka pocztowa zawierająca pojedynczą pocztę jest tylko plikiem zawierającym tę pocztę.
mutt
Polecenie rury komunikatów (domyślny skrót |
) mogą być użyte do tego celu. Otwiera wiersz poleceń i piszesz cat > DESIRED-FILE-PATH
.
Opcja „dekodowania potoku” kontroluje, co dzieje się z nagłówkami i częściami mime, gdy zapisujesz wiadomość w ten sposób.
Prawdopodobnie można by napisać makro dla tej funkcji.
set pipe_decode=yes
do mojego muttrc było to, o czym pisał Kai von Fintel.
=
.
Jeśli masz touch
plik, a następnie spróbuj zapisać lub skopiować do niego wiadomość, mutt użyje go jako mbox.
Możesz także użyć funkcji kopiowania zamiast zapisu. Mutt zakłada, że poczta powinna istnieć tylko w jednej kopii, a zapisanie wiadomości w innej skrzynce spowoduje usunięcie jej z pierwszej, a kopiowanie wykona właściwą kopię.
Kai von Fintel „s odpowiedź działa idealnie, ale po prostu pomyślałem, że podzielę makro do usprawnienia tego procesu.
Po pierwsze muttrc
:
macro index,pager S "| ~/.local/bin/file_email /tmp<enter>"
Spowoduje to przesłanie pełnego e-maila (w tym nagłówków i załączników) do następującego skryptu. Utwórz plik wykonywalny pod adresem ~/.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"
Ten skrypt zapisuje plik w pierwszym argumencie (tzn. W muttrc
powyższym przykładzie wiadomość e-mail zostanie zapisana /tmp
). Format nazwy pliku to YYMMDD SUBJECT.eml
. Konwertuje również /
na, ∕
aby zapobiec tworzeniu podkatalogów.
formail
skryptu nie byłoby łatwiejsze ?
formail
, więc przeczytałem. Nie jestem jednak do końca pewien, do której części mojego skryptu się odnosiłeś? Używasz formail
do wyodrębnienia tematu i daty? Jeśli tak, prawdopodobnie fajny pomysł. Zachęcałbym cię do napisania odpowiedzi; Zdecydowanie poparłbym to.
Wypróbowałem wszystkie sugerowane odpowiedzi, ale nie mogłem zapisać nieprzetworzonego, wieloczęściowego (tekst / zwykły + tekst / HTML) e-maila do zapisania do pliku, w tym jego nagłówków i wszystkiego. Potrzebowałem tego, aby nakarmić mój filtr antyspamowy wiadomością e-mail, aby nauczyć go, że określona poczta to spam, czy nie ...
Rozwiązaniem, które wymyśliłem, jest naciśnięcie e
(tj. „Edytuj wiadomość”) na otwartej wiadomości, która otwiera nieprzetworzoną wiadomość w wybranym edytorze. Raw tutaj oznacza, że otrzymujesz wiadomość dokładnie tak, jak przyszła w mutt, więc masz wszystkie nagłówki i wszystkie bajty, które składają się na wiadomość.
Po uderzeniu e
piszę bufor (ustawiam edytor na vim ) do pliku za pomocą :w <path_to_file>/<file_name>
i to wszystko.
PS: Dodałbym to jako komentarz, ale aby to zrobić, musisz mieć pewien poziom reputacji. Wiem też, że pytanie jest bardzo stare, ale ponieważ wielu ludzi nadal używa neomutt , pomyślałem, że to może komuś pomóc.
Aktualizacja: Przeoczyłem pipe-decode
opcję, o której mówił Kai. Gdyby prawidłowo ustawić tę opcję, działałoby to |
również. Nadal działa też moje rozwiązanie ;-)