如何从文件中提取分隔的文本块并让 munpack 对其进行解码?

如何从文件中提取分隔的文本块并让 munpack 对其进行解码?

我正在尝试恢复从硬盘崩溃中恢复的电子邮件文件中的附件。该文件本质上是消息的串联,包括采用 Base-64 编码的附件。

这里的一项搜索表明 munpack 可用于将文本块转换为相关文件,并且在测试中运行良好。但它似乎无法获取整个文件并对其进行遍历,并在遇到文件时提取块。这就是我想弄清楚该怎么做。

这个帖子 提取两个特定行之间的文本 似乎提出了一种方法来提取相关的 Base-64 编码文本块并将它们放入文件中。

我的尝试是使用这一行 cat test.txt | sed -n "/Content-Type: image/,/--=/p" > test2.txt 然后在 test2.txt 上运行 munpack

根据我使用的尾随分隔符(-- 或 --= 或 --=_),我要么只获得文件中的第一个图像,要么只获得 test2.txt 的副本

这里的其他搜索以及谷歌搜索都没有结果。

我认为其他人以前也遇到过这个问题。谁能指出我的解决方案吗?

蒂亚,马特

PS 我尝试将该文件导入 Thunderbird,但它仅作为一条消息出现。因此,这种方法已经被尝试过,但惨遭失败。

更新 1:诚然,这是一个拼凑,但它有点有效:

cat test.txt | sed -n '/^Content-Type: image/,/--.*/ p' > test1.txt
cat test1.txt | sed 's/--.*/--_31415927/' > test2.txt
cat emailfmt2.eml test2.txt > test_images.eml

其中:test.txt是嵌入电子邮件的原始文本文件,“_31415927”是自定义边界,emailfmt2.eml是电子邮件的标题:

Date: Sun, 01 Jul 2027 00:00:00 +0000
Subject: Test format
From: [email protected]
To: [email protected]
Content-Type: multipart/mixed; boundary="_31415927"

--_31415927
Content-Type: text/plain; charset="UTF-8"; format=flowed; delsp=yes

test format...

--_31415927

因此,我在这里所做的是(理想情况下)收集“图像”标签之间的所有内容,然后用我定制的边界标记替换不同的边界标记。然后将该结果附加到电子邮件模板 (emailfmt2.eml)。

当生成的 .eml 文件导入 Thunderbird 时,它会自动将所有内容解析为附件。我至少可以在 T-bird 中处理这个问题。 (顺便说一句,看起来 T-bird 不显示 GIF 文件。或者至少我没有设置它来很好地处理它们)。

我还没有尝试弄清楚 munpack (可以吗?) 是如何工作的,但这是一个开始。

更新 2:上面修复了少量编辑/拼写错误。另外,看起来我需要测试的分隔符是

--.*

因为有些消息有边界,例如“--Boundary[...]”。

对 10MB 文件的测试似乎表明 Thunderbird 能够处理非 GIF 代码。即,生成的导入的虚假电子邮件消息已正确导入 JPEG、PDF 和 .XPI 文件。

除非我能弄清楚如何让 munpack 从命令行处理所有这些(保存遇到的每个文件),否则我认为我剩下的过程涉及将所有 .txt 文件的符号链接放入一个文件夹中,对所有这些文件运行上述 cat/sed 命令以创建一封巨大的“电子邮件”,然后查看 Thunderbird 是否可以导入它。或者将其分成多个可以导入的“电子邮件”。

我仍然想知道这是否可以在命令行上完成以保存附件,而无需调用 Thunderbird

答案1

看起来我需要的是 uudeview,在每个文本文件的空文件夹中运行类似的内容:

for file in $(find /path/to/drive -iname "*.txt"); do
  uudeview -i -a -d +o "$file"
done

相关内容