挑戦
現在、muttで見ているメールのローカルパスを確認し、メールをローカルプロジェクトフォルダに保存する前または後にbashスクリプトに送信したいと思います。
コンセプト
私は永久的なインターネット接続の必要性から私のメールインフラストラクチャを分離するために使用しmutt
ています。これを行うと、メールファイル構造内の私のメッセージが見つかりましたが、各メッセージはおそらく独自のローカルフォルダ構造にあります。offlineimap
msmtp
<PROJECT>
<ACCOUNT>
Mail/
|-- <PROJECT>/
| |-- cur/
| | |-- 1584016380.RPi-18:2,
| | |-- 1595241604.RPi-18:2,
| | |-- 1603636018.RPi-18:2,
| | `-- 1612159655.RPi-18:2,
| |-- new/
| `-- tmp/
|-- <ACCOUNT>/
| |-- DRAFTS/
| | |-- cur/
| | |-- new/
| | `-- tmp/
| |-- INBOX/
...
メールを閲覧するとき(muttのインデックスまたはポケットベルビューを使用)、スケッチフォルダ構造でmuttが読み取る対応するメール要素を選択、表示、削除することができます。
今、muttの関数を使って現在のメッセージを保存したいと思いますsave-message
。しかし、その前に(または保存した後)電子メールの添付ファイルを自動的に抽出し、電子メールの内容に対して他のことをしたいと思います。
~/Mail/<PROJECT>/cur/1584016380.RPi-18:2
メールファイルのパス(パラメータなど)を読み、コマンドを使用して事前定義された場所にメール添付ファイルを保存するbashスクリプトを作成しましたmu
。
質問
私は現在見ているメールファイルの実際の場所を知らせるすべてを見つけるために利用可能なmutt変数(folder
、、、、spoolfile
...)を調べました。from
しかし、何も見つかりません。だから私はローカルでメールを見つけるためにbashスクリプトにどのパスを渡すべきかわかりません。
ここで使えるものはありますか?
ベストアンサー1
この質問がかなり大きくなり、解決するには、質問の下のコメントで議論が必要なので、答えを書くことにしました。
わかりました。プロジェクト発信者、件名、または本文の内容によって異なります。
これには2つのマクロが必要です。Neomuttはマクロキーを押すとファイルを追加するコマンドを実行します。
最初のマクロは操作を実行し、別々のファイルになければなりません。これは、シェル部分がマクロ定義を拡張するためです。そのため、最初のマクロの2番目のマクロを定義して再定義して実行する必要があります。
~/.mutt/dynamic_macro
"<pipe-message>/path/to/your/script<enter>\
<save-message>`cat /tmp/mutt_project`<enter>" \
"pipe message to extract attachments and save message"
~/.mutt/muttrc
macro index ,S \
"<enter-command>source ~/.mutt/dynamic_macro<enter>\
<enter-command>push ,s<enter>" \
"redefine macro and run it"
/path/to/your/script
これで動作しない擬似コード(bashに似た)の例があります。スクリプトは標準入力からメッセージを読み取り、ヘッダーまたは本文を解析して決定します。プロジェクト名前(メールボックス名)を指定し、部分を繰り返して添付ファイルを保存します。アイテムごとに特定のディレクトリとサブディレクトリに保存することもできます。
detect_project(){
# parse $content to detect project from body/headers
# save the project name to /tmp/mutt_project for the 1st macro
# and output on stdout for save_attachemnts()
echo $result > /tmp/mutt_project
echo $result
}
save_attachments(){
# parse $content, iterate over parts of message from $content,
# extract attachments, decode, save to:
#/root_directory_with_attachments/$project/$your_filename
}
main(){
content=$(cat) # read the stdin and save it into variable
project=$(detect_project)
save_attachments
}
main
提案:
- 電子メール処理用のライブラリを含む言語を使用すると、これらの部分にアクセスしてデコードできます。
- 他のプロジェクトの複数のメッセージにタグを付けたい場合は、上記の例がタグプレフィックスでは機能しないと確信しています。その理由は、マクロが一度実行され、すべてのメッセージがすぐに/ path / to / your / scriptにパイプされますが、パラメータには最後のメッセージ
<save-message>
で検出されたエントリが含まれるためです。
さまざまなソリューション:muttからneomutへ、muからnotmuchへの移行。 Neomuttには、not muchの優れたサポート機能が組み込まれています。ここにあるすべての作業は、いくつかの新しいフックを使用して実行できます。ユースケースに適しており、バックグラウンドで実行され、neomuttマクロは必要なく、元のソリューションタグプレフィックスの制限を排除します。 Nomtuch post-newフックは、メッセージが同期されるたびに実行されます。
- 送信者/受信者/参照/タイトルヘッダー本文のコンテンツまたはその他のタグに基づいてメッセージにタグを付けることができます。
- 添付ファイルは post-new フックで保存することもできます。
興味がある場合は、ここにコメントを残していただければ回答を拡大させていただきます。