回答:
このs
コマンドは、maildir形式のメールボックスに保存します。残念ながら、ファイルへの保存コマンドはありません。おそらく、歴史的なmbox形式では、単一のメールを含むメールボックスはそのメールを含む単なるファイルであるためです。
mutt
コマンドパイプメッセージ(デフォルトショートカット|
)、このために使用することができます。コマンドラインを開き、次のように記述しcat > DESIRED-FILE-PATH
ます。
「pipe-decode」オプションは、この方法でメッセージを保存するときにヘッダーとMIMEパーツに何が起こるかを制御します。
おそらく、この機能のためのマクロを書くことができます。
set pipe_decode=yes
muttrcに追加することでKai von Fintelが書いていることを見つけるために少し掘り下げなければなりませんでした。
=
これを行うと未処理の改行が表示されます。
もし、あんたが touch
Muttはmbox形式としてそれを使用するファイルは、その後、保存しようとするかにメッセージをコピーします。
また、保存の代わりにコピーを使用することもできます。Muttは、メールは1つのコピーにのみ存在し、別のメールボックスにメッセージを保存すると最初のメールボックスから削除され、コピーは適切なコピーを行うと想定します。
Kai von Fintelの答えは完璧に機能しますが、このプロセスを合理化するマクロを共有したいと思っていました。
まず、中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
です。また、サブディレクトリの作成を防ぐために変換/
し∕
ます。
formail
スクリプトで使用する方が簡単ではないでしょうか?
formail
ので、読みました。ただし、スクリプトのどの部分を参照していたのか、完全にはわかりません。formail
件名と日付の抽出に使用していますか?もしそうなら、おそらく良いアイデアです。答えを書くことをお勧めします。絶対に賛成です。
提案されたすべての回答を試しましたが、ヘッダーやすべてを含む未加工のマルチパート(text / plain + text / html)電子メールをファイルに保存できませんでした。特定のメールがスパムであるかどうかを教えるために、スパムフィルタに電子メールを送信するためにこれが必要でした...
私が思いついた解決策はe
、開いているメッセージを押す(つまり、「メッセージを編集する」)ことです。選択したエディターでます。ここでのRawとは、muttに到着したとおりにメッセージを取得するため、メッセージを構成するすべてのヘッダーとすべてのバイトがあることを意味します。
打った後e
、私はちょうどバッファ(へのIセットエディタの書き込みVimを使ってファイルに):w <path_to_file>/<file_name>
、それはそれです。
PS:これをコメントとして追加しましたが、これを行うにはある程度の評判が必要です。また、質問は非常に古いことは知っていますが、neomuttはまだ多くの人が使用しているので、これは誰かを助けるかもしれないと思いました。
更新:pipe-decode
Kaiが話していたオプションを見落としていました。そのオプションが正しく設定されていれば|
、経由でも機能します。それでも私のソリューションも機能しています;-)