Wenn ich S
mutt drücke , wird die E-Mail in einem E-Mail-Ordnerformat gespeichert ( cur/ tmp/ new/
), aber ich möchte, dass eine einzelne Datei gespeichert wird, genau wie Anhänge gespeichert werden.
Ist das konfigurierbar?
Wenn ich S
mutt drücke , wird die E-Mail in einem E-Mail-Ordnerformat gespeichert ( cur/ tmp/ new/
), aber ich möchte, dass eine einzelne Datei gespeichert wird, genau wie Anhänge gespeichert werden.
Ist das konfigurierbar?
Antworten:
Die eigentliche Nachricht wird auch als Anhang angezeigt, sodass Sie sie aus der Anhangsliste speichern können. Klicken Sie entweder im Index oder in der Nachricht selbst auf v, um die Anhänge zu öffnen und szu speichern
Der s
Befehl wird in einer Mailbox gespeichert, die für Sie im Maildir-Format vorliegt. Leider gibt es keinen Befehl zum Speichern in einer Datei, möglicherweise, weil im historischen mbox-Format ein Postfach, das eine einzelne Mail enthält, nur eine Datei ist, die diese Mail enthält.
Der mutt
Befehl rohr Nachricht (default Verknüpfung |
) kann hierfür verwendet werden. Es öffnet sich eine Befehlszeile und Sie schreiben cat > DESIRED-FILE-PATH
.
Die Option "Pipe-Decode" steuert, was mit Headern und Mime-Teilen geschieht, wenn Sie eine Nachricht auf diese Weise speichern.
Man könnte wahrscheinlich ein Makro für diese Funktionalität schreiben.
set pipe_decode=yes
Kai von Fintel über das Hinzufügen zu meiner Muttrc schrieb.
=
tue.
Wenn Sie touch
eine Datei speichern oder eine Nachricht kopieren, wird sie von mutt als Mbox verwendet.
Außerdem möchten Sie möglicherweise "Kopieren" anstelle von "Speichern" verwenden. Mutt geht davon aus, dass eine E-Mail nur in einer Kopie vorhanden sein sollte, und das Speichern einer Nachricht in einer anderen Mailbox löscht sie von der ersten, während beim Kopieren eine ordnungsgemäße Kopie erstellt wird.
Kai von Fintel ‚s Antwort funktioniert perfekt, aber ich dachte , ich würde ein Makro teilen diesen Prozess zu optimieren.
Erstens in muttrc
:
macro index,pager S "| ~/.local/bin/file_email /tmp<enter>"
Dadurch wird die gesamte E-Mail (einschließlich der Header und Anhänge) an das folgende Skript weitergeleitet. Erstellen Sie eine ausführbare Datei unter ~/.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"
Dieses Skript speichert die Datei im ersten Argument (dh im muttrc
obigen Beispiel wird die E-Mail in gespeichert /tmp
). Das Format des Dateinamens ist YYMMDD SUBJECT.eml
. Es wird auch konvertiert /
, ∕
um das Erstellen von Unterverzeichnissen zu verhindern.
formail
im Skript nicht einfacher ?
formail
, also habe ich gelesen. Ich bin mir jedoch nicht ganz sicher, auf welchen Teil meines Skripts Sie sich beziehen? Mit formail
Betreff und Datum extrahieren? Wenn ja, wahrscheinlich eine schöne Idee. Ich möchte Sie dringend bitten, eine Antwort zu schreiben. Ich würde es definitiv befürworten.
Ich habe alle vorgeschlagenen Antworten ausprobiert, konnte aber nicht die unformatierte, mehrteilige E-Mail (Text / Nur + Text / HTML) in einer Datei speichern, einschließlich der Überschriften und allem. Ich brauchte dies, um meinem Spam-Filter die E-Mail mitzuteilen, ob es sich bei einer bestimmten Mail um Spam handelt oder nicht ...
Die Lösung, die ich gefunden habe, ist das Drücken e
(dh "Nachricht bearbeiten") auf die geöffnete Nachricht, wodurch die Rohnachricht in einem Editor Ihrer Wahl geöffnet wird . Raw bedeutet hier, dass Sie die Nachricht genau so erhalten, wie sie in mutt angekommen ist. Sie haben also alle Header und alle Bytes, aus denen die Nachricht besteht.
Nach dem Schlagen e
schreibe ich einfach den Puffer (ich setze den Editor auf vim ) in eine Datei mit :w <path_to_file>/<file_name>
und das wars.
PS: Ich hätte dies als Kommentar hinzugefügt, aber Sie benötigen einen gewissen Bekanntheitsgrad, um dies zu tun. Ich weiß auch, dass die Frage sehr alt ist, aber da Neomutt immer noch von vielen Leuten benutzt wird, dachte ich, dass dies jemandem helfen könnte.
Update: Ich habe die pipe-decode
Option übersehen, über die Kai gesprochen hat. Mit dieser Option hätte es auch über funktioniert |
. Meine Lösung funktioniert auch noch ;-)