muttにメールをファイルとして保存しますか?


28

Smutt を押すと、メールはメールフォルダー形式(cur/ tmp/ new/)に保存されますが、添付ファイルの保存方法と同じように、1つのファイルを保存する必要があります。

それは構成可能ですか?

回答:


23

実際のメッセージも添付ファイルとして表示されるため、添付ファイルリストから保存できます。インデックスまたはメッセージ自体のいずれかから、ヒットvして添付ファイルを開き、s保存します


注:メールメッセージに添付ファイルが含まれている場合、添付ファイルリストの最初のエントリのみを保存すると、メッセージが保存されますが、添付ファイルは含まれません。
sdaau

3
別の注意:これは、送信者、受信者、件名などのヘッダーを保存しません。
スパラフーク

31

このsコマンドは、maildir形式のメールボックスに保存します。残念ながら、ファイルへの保存コマンドはありません。おそらく、歴史的なmbox形式では、単一のメールを含むメールボックスはそのメールを含む単なるファイルであるためです。

muttコマンドパイプメッセージ(デフォルトショートカット|)、このために使用することができます。コマンドラインを開き、次のように記述しcat > DESIRED-FILE-PATHます。

「pipe-decode」オプションは、この方法でメッセージを保存するときにヘッダーとMIMEパーツに何が起こるかを制御します。

おそらく、この機能のためのマクロを書くことができます。


クール、これはヘッダーも保存できますが、今のところは、マイケルの方法を使用します、ありがとう!
デイジー

1
これはうまく機能し、(パターンマッチングタグを使用して)50以上の電子メールをファイルに保存する効率的な方法を提供します。私はset pipe_decode=yesmuttrcに追加することでKai von Fintelが書いていることを見つけるために少し掘り下げなければなりませんでした。
Screenack

また、これにより、エクスポートされた電子メールファイルに添付ファイルも保存されます。
sdaau

これは問題ありませんが、=これを行うと未処理の改行が表示されます。
ジャックワシー

驚くばかり。これは私にとってはうまくいきました。古いMaildirから20通以上のメールを抽出したかっただけです。乾杯!
prageeth

10

もし、あんたが touch Muttはmbox形式としてそれを使用するファイルは、その後、保存しようとするかにメッセージをコピーします。

また、保存の代わりにコピーを使用することもできます。Muttは、メールは1つのコピーにのみ存在し、別のメールボックスにメッセージを保存すると最初のメールボックスから削除され、コピーは適切なコピーを行うと想定します。


1
フィルターテストスクリプトに貼り付けるには、ヘッダー全体を含むメッセージを取得する必要がありましたが、これは完全に機能しました。
ソレンBjornstad

2

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スクリプトで使用する方が簡単ではないでしょうか?
0andriy

@ 0andriy私はよく知らないformailので、読みました。ただし、スクリプトのどの部分を参照していたのか、完全にはわかりません。formail件名と日付の抽出に使用していますか?もしそうなら、おそらく良いアイデアです。答えを書くことをお勧めします。絶対に賛成です。
スパーホーク

0

提案されたすべての回答を試しましたが、ヘッダーやすべてを含む未加工のマルチパート(text / plain + text / html)電子メールをファイルに保存できませんでした。特定のメールがスパムであるかどうかを教えるために、スパムフィルタに電子メールを送信するためにこれが必要でした...

私が思いついた解決策はe、開いているメッセージを押す(つまり、「メッセージを編集する」)ことです。選択したエディターでます。ここでのRawとは、muttに到着したとおりにメッセージを取得するため、メッセージを構成するすべてのヘッダーとすべてのバイトがあることを意味します。

打った後e、私はちょうどバッファ(へのIセットエディタの書き込みVimを使ってファイルに):w <path_to_file>/<file_name>、それはそれです。

PS:これをコメントとして追加しましたが、これを行うにはある程度の評判が必要です。また、質問は非常に古いことは知っていますが、neomuttはまだ多くの人が使用しているので、これは誰かを助けるかもしれないと思いました。

更新:pipe-decode Kaiが話していたオプションを見落としていました。そのオプションが正しく設定されていれば|、経由でも機能します。それでも私のソリューションも機能しています;-)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.