Nomes de arquivos Munpack e utf-8 em anexos

Nomes de arquivos Munpack e utf-8 em anexos

eu tenho outro problema com UTF-8. Eu uso munpack -C $extrdir $filepara extrair automaticamente arquivos JPG de e-mails que recebi com arquivos fetchmail. Depois utilizo bashe imagemagickpara processar imagens que consigo obter find -iname "*.jpg*" -o -iname "*.jpeg*" -o -iname "*.JPEG*" -o -iname "*.JPG*". Isso funciona bem para a maioria das imagens, desde que nenhum espaço ou caractere especial seja adicionado ao nome do arquivo.

No código-fonte do e-mail, o nome do arquivo é escrito como

Content-Disposition: attachment; filename="=?UTF-8?B?V2FuZGVydW5nIFNwaWVsd2VnIDIuSlBH?=" 

. munpacksalve o arquivo como

=XUTF-8XBXV2FuZGVydW5nIFNwaWVsd2VnIDIuSlBHX=

Eu poderia adicionar "*XUTF*", findmas outros tipos de anexos, como arquivos txt, imagemagicktambém podem ser processados. munpacktambém substitui "?" com "X" é por isso que não consigo decodificar os nomes dos arquivos.

Você tem uma solução para este problema?

Desde já, obrigado!

Responder1

Esta solução alternativa fez isso por mim. Infelizmente, os nomes dos arquivos foram perdidos. Mas não era isso que eu procurava.

Use munpacke canalize a saída em um arquivo:

munpack -C $extrdir $file > attachments

O conteúdo do attachementsarquivo você verá agora o que foi extraído:

=XUTF-8XBXV2FuZGVydW5nTGFpdHNjaGVuYmFjaDExLkpQRw==X= (image/jpeg)
=XUTF-8XBXV2FuZGVydW5nTGFpdHNjaGVuYmFjaDE3LkpQRw==X= (image/jpeg)
...

Agora percorra cada uma das linhas, verifique se são imagens e renomeie-as:

while read p; do
    if [[ $p == *"image"* ]]
    then
        FLNM=attach_${num}.jpg
        IFS=' (' read -a array <<< "$p"
        mv "${array[0]}" "$FLNM"
    fi
    num=$((num + 1))
done <attachements

A saída no diretório será então:

attach_1.jpg
attach_2.jpg
attach_3.jpg

informação relacionada