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

1

Estou procurando uma maneira de salvar todos os anexos de uma pasta IMAP com mais de 3000 relatórios DMARC, cada um deles anexado às mensagens individuais como .zip ou .xml.gz file. Eu estou usando o Claws Mail que tem uma 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 munpack . Após algumas pesquisas na web, encontrei uma alternativa: metamail -wy sugeriu como resposta para pergunta .

Tentar isso diretamente em garras me deu algum erro (como não usar corretamente o programa). 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: ele funciona por si só, mas requer entrada interativa para cada mensagem individual - certamente não é uma opção para mais de 3000 e-mails.

A minha pergunta é:

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

    
por george 02.03.2018 / 13:58

1 resposta

1

Não sei ao certo como são os dados que você realmente tem, então o melhor que posso fazer são algumas suposições.

Eu usei metamail -q -w -x file_name com sucesso no passado em scripts para extrair anexos. Como você pode ver em man metamail , -w diz ao metamail para não consultar o arquivo mailcap, mas apenas extraia os anexos, -q diz para ficar quieto, porque os scripts não gostam da saída extra e -x diz que definitivamente não está sendo executado em um terminal, por isso não deve fazer perguntas estúpidas.

Você já tem -w e também está usando -y , que não será necessário se o e-mail estiver formatado corretamente, mas talvez o seu não seja - como eu disse, não sei quais dados Você tem. A man page também avisa sobre efeitos estranhos que podem acontecer com -y .

Então, primeiro, solte -y , veja se ainda funciona. Em seguida, adicione -x , veja se ele pára de perguntar. Por fim, adicione -q para remover a saída indesejada.

Editar

Depois de ser acusado de ser muito preguiçoso para tentar, fiz os seguintes passos:

1) Eu mesmo enviei 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 yyy , depois 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-M64bZlz e 1-MKfamEn . O segundo é o arquivo zip, o primeiro é o texto do corpo.

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

    
por 02.03.2018 / 17:17