我正在寻找一种方法来保存 IMAP 文件夹中的所有附件,其中包含 3000 多个 DMARC 报告,每个报告都作为.zip
或.xml.gz
文件附加在各个邮件中。我正在使用利爪锁甲其中有自动化的方法(参见示例 -> 保存)通过munpack
。不幸的是,在 openSUSE Leap 42.3(我使用的)上似乎没有提供 的软件包munpack
。经过一番网络搜索,我找到了一个替代方案:metamail -wy
建议作为对这个问题。
直接在 claws 中尝试这个操作会出错(因为没有正确使用程序)。因此,我手动将一条消息保存在临时目录中,然后从控制台尝试:
[/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
,-w
它告诉 metamail 不要查阅 mailcap 文件,而只是提取附件,-q
告诉它保持安静,因为脚本不喜欢额外的输出,并-x
告诉它它肯定不是在终端上运行,所以它不应该问愚蠢的问题。
您已经拥有-w
,并且还在使用-y
,如果邮件格式正确,则无需这样做,但您的邮件格式可能不正确 - 正如我所说,我不知道您拥有什么数据。手册页还警告了 可能发生的奇怪影响-y
。
因此,首先删除-y
,看看它是否仍然有效。然后添加-x
,看看它是否停止询问。最后添加-q
以删除不需要的输出。
编辑
在被指责懒得尝试之后,我做了以下步骤:
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 不会询问,并将所有部分保存为两个名为1-M64bZlz
和 的文件1-MKfamEn
。第二个是 zip 文件,第一个是正文。
现在呢?对我有用,对你没用。
答案2
- 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”来执行更好的文本提取(当您使用“-?”时不会显示)