我正在尝试恢复从硬盘崩溃中恢复的电子邮件文件中的附件。该文件本质上是消息的串联,包括采用 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