Como usar o metamail para extrair anexos de email sem entrada interativa?

Como usar o metamail para extrair anexos de email sem entrada interativa?

Estou procurando uma maneira de salvar todos os anexos de uma pasta IMAP com mais de 3.000 relatórios DMARC, cada um deles anexado às mensagens individuais como .zipum .xml.gzarquivo. estou usandoCorreio de Garrasque temuma maneira de automatizar isso(Veja Exemplos -> Salvar) através de munpack. Infelizmente no openSUSE Leap 42.3 (que eu uso) não parece haver um pacote que forneça arquivos munpack. Depois de alguma pesquisa na web, encontrei uma alternativa: metamail -wysugerida como resposta aessa questão.

Tentar isso diretamente no Claws me deu algum erro (como não usar o programa corretamente). Então salvei manualmente uma mensagem em um diretório temporário e tentei no console:

[/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

Em outras palavras: funciona por si só, mas requer entrada interativa para cada mensagem individual - certamente não é uma opção para mais de 3.000 e-mails.

Minha pergunta é:

Como posso usar metamailde uma forma que não exija entrada interativa, para que possa ser iterada (por exemplo, em um script ou através da funcionalidade do Claws Mail)?

Responder1

Não tenho certeza de como são realmente os dados que você possui, então o melhor que posso fazer são algumas suposições fundamentadas.

Usei metamail -q -w -x file_namecom sucesso no passado em scripts para extrair anexos. Como você pode ver em man metamail, -wdiz ao metamail para não consultar o arquivo mailcap, mas apenas extrair os anexos, -qdiz para ele ficar quieto, porque os scripts não gostam da saída extra, e -xdiz que definitivamente não está rodando em um terminal, então não deveria fazer perguntas estúpidas.

Você já possui -we também está usando o -y, o que não deveria ser necessário se o e-mail estiver formatado corretamente, mas talvez o seu não esteja - como eu disse, não sei quais dados você possui. A página de manual também alerta sobre efeitos estranhos que podem acontecer com o -y.

Então, primeiro solte -y, veja se ainda funciona. Depois adicione -x, veja se para de perguntar. Por fim, adicione -qpara remover saídas indesejadas.

Editar

Depois de ser acusado de ter preguiça de tentar, executei os seguintes passos:

1) Enviei para mim um arquivo zip com um arquivo vazio usando mutt. Aqui está o e-mail completo, com alguns cabeçalhos removidos/editados:

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) Salvei em uma caixa de correio chamada yyye executei

METAMAIL_TMPDIR=. metamail -q -x -w ~/Mail/yyy

3) Como esperado, o metamail não pergunta e salva todas as partes como dois arquivos chamados 1-M64bZlze 1-MKfamEn. O segundo é o arquivo zip, o primeiro é o corpo do texto.

E agora? Funciona para mim, não funciona para você.

Responder2

  1. rimmime é um utilitário muito bom para extrair anexos de um email (eu uso um script que é invocado do procmail)

2a) se você realmente deseja usar o munpack, provavelmente poderá usar o binário encontrado dentro do arquivo de gerenciamento de pacotes de uma versão anterior. Por exemplo, eu precisava do munpack no CentOS-7, mas não consegui encontrar um rpm para o mpack, então usei o rpmfinder para baixar este "mpack-1.6-2.el6.rf.x86_64.rpm" e usei este comando para descompactar o conteúdo.

rpm2cpio mpack-1.6-2.el6.rf.x86_64.rpm | cpio-idmv

(você pode querer fazer isso em uma subpasta vazia; use tree para encontrar os arquivos; os meus estavam em .usr/bin)

2b) munpack-1.6 possui uma opção não documentada "-t" para realizar melhores extrações de texto (não mostrada quando você usa "-?")

informação relacionada