web-dev-qa-db-ja.com

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

MuttでSを押すと、メールがメールフォルダ形式(cur/ tmp/ new/)ですが、添付ファイルの保存方法と同じように、1つのファイルを保存します。

それは構成可能ですか?

28
daisy

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

23
Michael Mrozek

sコマンドはメールボックスに保存します。これは、maildir形式です。残念なことに、save-to-fileコマンドはありません。おそらく、従来のmbox形式では、単一のメールを含むメールボックスは、そのメールを含む単なるファイルであるためです。

muttコマンドパイプメッセージ(デフォルトのショートカット|)を使用できます。コマンドラインが開き、cat > DESIRED-FILE-PATH

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

おそらくこの機能のためのマクロを書くことができるでしょう。

31
Kai von Fintel

ファイルをtouchしてからメッセージを保存またはコピーしようとすると、muttはそのファイルをmboxとして使用します。

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

10
kyrias

Kai von Fintelanswer は完全に機能しますが、このプロセスを合理化するためにマクロを共有すると思いました。

まず、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です。また、/に変換して、サブディレクトリの作成を防ぎます。

3
Sparhawk

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

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

eを押した後、:w <path_to_file>/<file_name>を含むファイルにバッファーを書き込みます(エディターをvimに設定します)。それ。

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

pdate: Kaiが話していたpipe-decodeオプションを見落としました。そのオプションが正しく設定されていれば、|でも機能します。それでも私の解決策も機能しています;-)

1
m4110c