web-dev-qa-db-ja.com

muttマクロは現在のメッセージからプロパティを取得できますか?

muttで、マクロは変数として使用するために、現在のメッセージからいくつかのプロパティを取得できますか? italicsで取得したいプロパティを持つ潜在的なマクロの例をいくつか示します。

  • gpg暗号化を削除 現在のメッセージ。つまり、decrypt-saveメッセージを含む現在のメールボックスに。
  • 現在のメッセージを保存 件名と日付を名前としてファイルに保存します。つまり、| cat > /tmp/filename、ここでファイル名はdate_subject
  • メッセージをメールボックスにファイルするarchive-year、ここでyearはメッセージの年によって異なります。 (メッセージの日付ではなく、現在の日付に基づいてこれを行うための way があります。)
2
Sparhawk

その他の回答 と同様に、一般的な意味でプロパティを取得する方法はまだわかっていませんが、2番目の例のハッキーな解決策を次に示します。

標準入力を介して電子メールを受け入れ、日付と件名を抽出して/path/to/save/email/date_subjectに保存するスクリプトを記述します。

#!/bin/env bash

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')    
# decode base64 (UTF-8)
if [[ "$subject" =~ ^=\?[Uu][Tt][Ff]-8\?B\?.*?= ]]; then
  nofront="$(echo "${subject#=\????-8\?B\?}")"
  todecode="$(echo "${nofront%\?=}")"
  subject="$(<<<"$todecode" base64 --decode)"
fi

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で、バインドします S この関数に:

macro index,pager S "| /path/to/script /path/to/save/email<enter>"

N.B.これは、複数行の件名の最初の行のみを使用します。

1
Sparhawk

メッセージからプロパティを取得する方法はわかりませんが、少なくとも最初の例では、別の解決策があります。

現在のメールボックスへのショートカットとして^を使用できるため、現在のメールボックスにdecrypt-saveしたい場合は、次の方法で可能です。

macro index <F7> <decrypt-save>^<Enter>y<Enter>
1