メッセージは、完全なヘッダーとともにテキストファイルに保存されます。 (このファイルはThunderbirdメールクライアントの受信トレイにあります。ファイル形式は次のとおりです。Mboxted多様性。 )
受信トレイに到達する前に各メッセージが通過する最初のサーバーを一覧表示する方法は? 「受信済み」行には、電子メールが通過したサーバーが一覧表示されます。 「受信済み」行を下から上に読みます。結論はイニシエータです。
1 つのオプションはsed
、、、grep
などによるawk
テキスト処理のためのカスタムスクリプトです。また、メールアナライザを検索して見つけました。電子メールヘッダーアナライザ(MHA)、メールディレクトリツールそしてnmh - メッセージ処理システム。まず、電子メールを配信するサーバーのリストを完成させるために、これらのツールのいずれかを使用してファイルを照会する方が簡単ですか?
答え1
発生する状況に応じて、mboxファイルをその構成メッセージの近似値に分割します。~から(コロンなし)。次にコレクション全体を繰り返し、最後のコレクションを選択します。受け取ったそれぞれのタイトル。
mbox=/path/to/mbox/file
mkdir xx
(
cd xx
csplit -ksz -n5 "$mbox" '/^From /' '{*}'
for m in *
do
awk '
/^\r?$/ { gsub(/[\r\n[:space:]]+/, " ", received); print received; exit }
/^[^[:space:]]/ { flag = 0 }
/^Received:/ { received = $0; flag = 1 }
/^[[:space:]]/ && flag { received = received " " $0 }
' "$m"
done
)
rm -rf xx
元のmboxファイルを読むことは難しくありませんがawk
、ソリューションの作成を始めたときにメッセージを使用していました。シェルループを使用するよりもこのソリューションを拡張する方が簡単ですが、振り返ってみると、awk
おそらくどちらも約60:40に過ぎませんでした。
awk
スクリプトが一度に1つのメッセージを処理することを考えると、次のようになります。formail
(もともとはコメントからprocmail
コレクション)を使用してmbox形式のファイルからのメッセージを繰り返すことができます。
formail < "$mbox" -s awk '....'
答え2
awk '/^Received: / {
LASTREAD=$0
exit
}
/^\r{0,1}$/ {
if "" == LASTREAD {
exit 1
}
print LASTREAD
exit 0
}
END {
if "" == LASTREAD {
exit 1
}
print LASTREAD
}'
(検証されていません)。
これにより、一致する最初の行が抽出されます。これが最初のジャンプかどうかは別の問題です。内容の構造は異なる場合があります。