E-Mail als Datei in mutt speichern?

28

Wenn ich Smutt 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?

Gänseblümchen
quelle

Antworten:

23

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

Michael Mrozek
quelle
Nur ein Hinweis: Wenn Ihre E-Mail-Nachricht Anhänge enthält, wird die Nachricht gespeichert, wenn Sie nur den ersten Eintrag aus der Liste der Anhänge speichern - jedoch ohne die darin enthaltenen Anhänge.
Sdaau
3
Ein weiterer Hinweis: Hiermit werden keine Header gespeichert, einschließlich Absender, Empfänger und Betreff.
Sparhawk
31

Der sBefehl 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 muttBefehl 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.

Kai von Fintel
quelle
Cool, das kann auch die Überschriften retten, aber fürs Erste würde ich Michaels Weg benutzen, danke!
Daisy
1
Dies funktioniert gut und bietet eine effiziente Methode zum Speichern von über 50 E-Mails (mithilfe von Pattern-Matching-Tags) in einer Datei. Ich musste ein wenig graben, um herauszufinden, dass set pipe_decode=yesKai von Fintel über das Hinzufügen zu meiner Muttrc schrieb.
Screenack
Dadurch werden auch die Anhänge in der exportierten E-Mail-Datei gespeichert.
Sdaau
Das ist in Ordnung, aber ich sehe unbehandelte Zeilenumbrüche, wenn ich das =tue.
Jack Wasey
Genial. Das hat bei mir super geklappt. Ich wollte nur mehr als 20 E-Mails von einem veralteten Maildir extrahieren. Prost!
Prageeth
10

Wenn Sie toucheine 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.

kyrias
quelle
1
Ich musste die Nachricht mit den vollständigen Kopfzeilen abrufen, um sie in ein Filtertestskript einzufügen, und das funktionierte einwandfrei.
Soren Bjornstad
2

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 muttrcobigen 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.

Sparhawk
quelle
Wäre die Verwendung formailim Skript nicht einfacher ?
11.
@ 0andriy Ich kenne mich nicht aus formail, also habe ich gelesen. Ich bin mir jedoch nicht ganz sicher, auf welchen Teil meines Skripts Sie sich beziehen? Mit formailBetreff 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.
Sparhawk
0

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 eschreibe 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-decodeOption übersehen, über die Kai gesprochen hat. Mit dieser Option hätte es auch über funktioniert |. Meine Lösung funktioniert auch noch ;-)

m4110c
quelle