Como extrair blocos delimitados de texto de um arquivo e fazer com que o munpack os decodifique?

2

Estou tentando recuperar os anexos em um arquivo de e-mail que foi recuperado do meu travamento de disco rígido. O arquivo é essencialmente uma concatenação de mensagens, incluindo os anexos na codificação de base 64.

Uma pesquisa aqui sugeriu que o munpack poderia ser usado para converter um bloco de texto para o arquivo relevante e em um teste que funcionasse bem. Mas parece que não é possível tirar toda a confusão de um arquivo e passar por ele, extraindo blocos à medida que eles se deparam com eles. É isso que eu quero descobrir como fazer.

Esta postagem    Extrair texto entre duas linhas específicas parecia sugerir uma maneira de retirar blocos relevantes de texto codificado na base 64 e colocá-los em um arquivo.

Minha tentativa foi usar essa linha     cat test.txt | sed -n "/ Content-Type: imagem /, / - = / p" > test2.txt e então rodar o munpack no test2.txt

Dependendo do delimitador de trailing que eu uso (- ou - = ou - = _) eu obtive apenas a primeira imagem no arquivo ou apenas uma duplicata de test2.txt

Outras pesquisas aqui não resultaram em nada, assim como nas pesquisas do Google.

Eu acho que alguém já se deparou com esse problema antes. Alguém pode me indicar a solução?

TIA, Matt

PS Eu tentei importar o arquivo para o Thunderbird e ele aparece como uma única mensagem. Então essa abordagem já foi tentada e falha miseravelmente.

Atualização 1: Isso é um kludge, reconhecidamente, mas funciona meio que:

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

Onde: test.txt é o arquivo de texto original com e-mails incorporados, "_31415927" é um limite personalizado, emailfmt2.eml é o cabeçalho de um email:

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

Então, o que estou fazendo aqui é (idealmente) coletar tudo entre as tags "image" e, em seguida, substituir os diferentes marcadores de limite por um customizado. Esse resultado é então anexado a um modelo para um email (emailfmt2.eml).

Quando o arquivo .eml resultante é trazido para o Thunderbird, ele automaticamente analisa tudo em anexos. Que eu posso pelo menos lidar no T-bird. (Como um aparte, parece que o T-bird não "exibe arquivos GIF. Ou pelo menos eu não o tenho configurado para lidar com eles bem).

Eu não tentei descobrir como o munpack (poderia?) funcionar, mas é um começo.

Atualização 2: pequenas edições / erros corrigidos acima. Além disso, parece que o delimitador que preciso testar é

--.*

como algumas mensagens tinham limites como "- limite [...]".

Um teste em um arquivo de 10MB parece mostrar ao Thunderbird ser capaz de manipular o código não-GIF. Ou seja a mensagem de e-mail falso importada resultante tinha JPEGs, PDFs e um arquivo .XPI totalmente importados.

A menos que eu descubra como fazer com que o munpack processe tudo isso a partir da linha de comando (salvando cada arquivo conforme ele é encontrado), acho que me resta um processo que envolve colocar links simbólicos em todos os arquivos .txt em uma pasta, executando os comandos cat / sed acima em todos esses arquivos para criar um enorme "email" e, em seguida, ver se o Thunderbird pode importá-lo. Ou divida-o em vários "e-mails" que podem ser importados.

Eu ainda gostaria de saber se isso tudo pode ser feito na linha de comando para salvar os anexos, sem ter que invocar o Thunderbird

    
por mconsidine 02.07.2017 / 21:54

1 resposta

1

Parece que o que eu precisava era uudeview, executar algo assim em uma pasta vazia em cada um dos arquivos de texto:

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