対話型入力なしでメタメールを使用してメールの添付ファイルを抽出する方法は?

対話型入力なしでメタメールを使用してメールの添付ファイルを抽出する方法は?

.zip3000以上のDMARCレポートが個々のメッセージにまたは.xml.gzファイルとして添付されているIMAPフォルダからすべての添付ファイルを保存する方法を探しています。クローメールこれにはこれを自動化する方法(例を参照 -> 保存)から までmunpack。残念ながら、openSUSE Leap 42.3(私が使用している)では を提供するパッケージがないようですmunpack。ウェブで検索した後、代替案を見つけました。metamail -wyの回答として提案されています。この質問

これを直接 claws で試すと、エラーが発生しました (プログラムを正しく使用していないため)。そこで、手動で 1 つのメッセージを temp ディレクトリに保存し、コンソールから試しました。

[/tmp/download]: metamail -yw msg
Date: Mon, 03 Nov 2014 10:13:53 +0000
Subject: Report domain: ████████ Submitter: ████████
From: [email protected]
To: ████████


This message contains data in an unrecognized format, application/zip,
which can either be viewed as text or written to a file.

What do you want to do with the application/zip data?
1 -- See it as text
2 -- Write it to a file
3 -- Just skip it

2
Please enter the name of a file to which the data should be written
(Default: ████████.zip) >
Wrote file ████████.zip

言い換えると、それ自体は機能しますが、個々のメッセージごとに対話型入力が必要であり、3000 通以上のメールの場合は選択肢になりません。

私の質問は次のとおりです:

metamail対話型入力を必要とせず、反復処理できる方法(スクリプト内や Claws Mail の機能など)で使用するにはどうすればよいでしょうか?

答え1

あなたが持っているデータが実際にどのようなものかはわかりませんので、私にできるのは推測することだけです。

過去には、添付ファイルを抽出するスクリプトで をうまく使用していましたmetamail -q -w -x file_name。 からわかるように、 はman metamail-wmetamail に mailcap ファイルを参照せずに添付ファイルのみを抽出するように指示し、-qスクリプトは余分な出力を好まないので静かにするように指示し、-x端末上で実行されていないことは確実であるため、愚かな質問をすべきではないことを伝えます。

すでに があり-w、 も使用しています-y。メールが適切にフォーマットされている場合は は必要ありませんが、おそらくあなたのメールはフォーマットされていないでしょう。前述したように、どのようなデータを持っているかはわかりません。man ページには、 で発生する可能性のある奇妙な影響についても警告されています-y

まず を削除して-y、まだ動作するかどうかを確認します。次に を追加して-x、尋ねなくなるかどうかを確認します。最後に を追加して、-q不要な出力を削除します。

編集

試すのが面倒だと非難された後、私は次の手順を実行しました。

1) を使用して、空のファイル 1 つを含む zip ファイルを自分自身にメールで送信しましたmutt。以下は、一部のヘッダーを削除/編集した完全なメールです。

From mail  Sat Mar  3 12:49:13 2018
Envelope-to: <dirk@...>
...
Message-ID: <20180303114913.xr7xvpx2pso6wurn@feanor>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="gsrhzrdopn4ddt7t"
Content-Disposition: inline
User-Agent: NeoMutt/20170609 (1.8.3)
Content-Length: 480
Lines: 18


--gsrhzrdopn4ddt7t
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Test

--gsrhzrdopn4ddt7t
Content-Type: application/zip
Content-Disposition: attachment; filename="foo.zip"
Content-Transfer-Encoding: base64

UEsDBAoAAAAAALplY0wAAAAAAAAAAAAAAAAHABwAenp6L2Zvb1VUCQAD8IqaWvCKmlp1eAsA
AQToAwAABOgDAABQSwECHgMKAAAAAAC6ZWNMAAAAAAAAAAAAAAAABwAYAAAAAAAAAAAApIEA
AAAAenp6L2Zvb1VUBQAD8IqaWnV4CwABBOgDAAAE6AMAAFBLBQYAAAAAAQABAE0AAABBAAAA
AAA=

--gsrhzrdopn4ddt7t--

2) というメールボックスに保存しyyy、実行しました。

METAMAIL_TMPDIR=. metamail -q -x -w ~/Mail/yyy

3) 予想通り、metamail は何も尋ねず、すべての部分を および という 2 つのファイルとして保存します1-M64bZlz。21-MKfamEn番目は zip ファイルで、1 番目は本文です。

そして今はどうですか?それは私には効きますが、あなたには効きません。

答え2

  1. ripmime は電子メールから添付ファイルを抽出するための非常に優れたユーティリティです (私は procmail から呼び出されるスクリプトを使用しています)

2a) munpack を本当に使用したい場合は、以前のリリースのパッケージ管理ファイル内にあるバイナリを使用できる可能性があります。たとえば、CentOS-7 で munpack が必要でしたが、mpack の rpm が見つからなかったため、rpmfinder を使用して「mpack-1.6-2.el6.rf.x86_64.rpm」をダウンロードし、このコマンドを使用して内容を解凍しました。

rpm2cpio mpack-1.6-2.el6.rf.x86_64.rpm | cpio -idmv

(空のサブフォルダでこれを行うといいかもしれません。ファイルを見つけるにはツリーを使用します。私のファイルは .usr/bin の下にありました)

2b) munpack-1.6 には、より優れたテキスト抽出を実行するための、文書化されていないスイッチ「-t」があります (「-?」を使用する場合は表示されません)。

関連情報