如何使用 metamail 提取邮件附件而无需交互式输入?

如何使用 metamail 提取邮件附件而无需交互式输入?

我正在寻找一种方法来保存 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

  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”来执行更好的文本提取(当您使用“-?”时不会显示)

相关内容