MuttでS
を押すと、メールがメールフォルダ形式(cur/ tmp/ new/
)ですが、添付ファイルの保存方法と同じように、1つのファイルを保存します。
それは構成可能ですか?
実際のメッセージは添付ファイルとしても表示されるため、添付リストから保存できます。インデックスまたはメッセージ自体から、 v 添付ファイルを開き、 s 保存する
s
コマンドはメールボックスに保存します。これは、maildir形式です。残念なことに、save-to-fileコマンドはありません。おそらく、従来のmbox形式では、単一のメールを含むメールボックスは、そのメールを含む単なるファイルであるためです。
mutt
コマンドパイプメッセージ(デフォルトのショートカット|
)を使用できます。コマンドラインが開き、cat > DESIRED-FILE-PATH
。
"pipe-decode"オプションは、この方法でメッセージを保存したときにヘッダーとMIMEパーツがどうなるかを制御します。
おそらくこの機能のためのマクロを書くことができるでしょう。
ファイルをtouch
してからメッセージを保存またはコピーしようとすると、muttはそのファイルをmboxとして使用します。
また、保存ではなくコピーを使用することもできます。 Muttはメールが1つのコピーにのみ存在し、メッセージを別のメールボックスに保存すると最初のメールボックスから削除されると想定していますが、コピーは適切なコピーを行います。
Kai von Fintel の answer は完全に機能しますが、このプロセスを合理化するためにマクロを共有すると思いました。
まず、muttrc
で:
macro index,pager S "| ~/.local/bin/file_email /tmp<enter>"
これにより、電子メール全体(ヘッダーと添付ファイルを含む)が次のスクリプトにパイプされます。 ~/.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"
このスクリプトはファイルを最初の引数に保存します(つまり、上記のmuttrc
の例では、電子メールは/tmp
に保存されます)。ファイル名の形式はYYMMDD SUBJECT.eml
です。また、/
を∕
に変換して、サブディレクトリの作成を防ぎます。
提案されたすべての回答を試しましたが、生のマルチパート(text/plain + text/html)電子メールをヘッダーやすべてを含めてファイルに保存できませんでした。特定のメールがスパムかどうかを教えるために、スパムフィルターに電子メールを送信するためにこれが必要でした...
私が思いついた解決策は、開いているメッセージでe
(つまり「メッセージの編集」)を押すことです。これにより、選択したエディタで生のメッセージが開きます。ここで生とは、メッセージがmuttに到着したとおりに取得されるため、メッセージを構成するすべてのヘッダーとすべてのバイトがあることを意味します。
e
を押した後、:w <path_to_file>/<file_name>
を含むファイルにバッファーを書き込みます(エディターをvimに設定します)。それ。
PS:私はこれをコメントとして追加したでしょうが、これを行うにはある程度の評判が必要です。また、質問が非常に古いことは知っていますが、neomuttがまだ多くの人に使用されているため、これが誰かの役に立つかもしれないと思いました。
pdate: Kaiが話していたpipe-decode
オプションを見落としました。そのオプションが正しく設定されていれば、|
でも機能します。それでも私の解決策も機能しています;-)