Remover / Excluir Anexos do servidor de email (IMAP)

1

Eu tenho uma grande quantidade de e-mails no meu servidor de e-mail (IMAP) que contêm anexos (PDFs, etc.). Esses anexos gastam espaço - meu espaço no disco rígido no servidor é limitado pela minha empresa de hospedagem - e estou tentando para recuperar um pouco desse espaço removendo os anexos dos emails. (Eles são redundantes no servidor de e-mail, já que praticamente todos foram baixados ou carregados localmente.)

Quando usei o Windows (há muito tempo atrás), havia um aplicativo chamado "IMAPSize" que era um manipulador de e-mail "cliente-tipo" que podia ser usado para acessar o servidor de e-mail e manipular as mensagens, remover anexos etc. Mas eu não encontrei (até agora) nada comparável em termos de facilidade de uso e execução, para Unix / Linux (embora possamos ter soluções muito melhores e mais robustas - eu simplesmente não sei qual). / p>

Estou ciente do munpack (já o instalei e usei localmente) e do ripmime, mas parece-me que esses programas servem para manipular mensagens quando elas estão armazenadas localmente, Mbox ou MailDir. Eu não sincronizo minhas mensagens de e-mail localmente, preferindo deixá-las em nosso servidor (tenho tantos e-mails, mais de 100k, de forma agregada).

Além disso, o Munpack parece ser ótimo na extração de anexos, mas eu não vi uma maneira de excluir os anexos, sem destruir a própria mensagem.

Eu tenho Horde, Roundcube e SquirrelMail disponíveis como GUIs da web, mas, novamente, não vi uma maneira de excluir apenas os anexos.

Além disso, estou procurando uma solução que não envolva configuração e configuração complexas, etc. (posso estar sonhando / pedindo demais.)

Eu pensei em tentar esta abordagem: usar o offlineimap para baixar e sincronizar todos os meus emails localmente, então possivelmente usar munpack ou ripmime para excluir anexos (desde que eu possa encontrar uma maneira de fazer isso, ao invés de apenas extraí-los) e então re-sync com o servidor e esperançosamente, e-mails estariam de volta no servidor sem anexos mas a) não tenho certeza se essa abordagem funcionaria e 2) novamente, eu não estou realmente querendo baixar dezenas de milhares de e-mails, localmente ....

Tenho certeza de que existe uma solução para mim (talvez algum tipo de aplicativo GUI do tipo cliente que me permita manipular emails em servidores / excluir anexos; ou alguma outra abordagem não muito complexa.)

Nota: eu não uso o Thunderbird e não desejo instalá-lo ou usá-lo; e mesmo para o vinho. Eu tento manter minha caixa muito 'minimalista' com aplicativos leves, sempre que possível.

Obrigado por um ponteiro na direção certa.

    
por stef204 17.12.2014 / 17:12

3 respostas

1

Eu tive o seguinte bit de perl que retira todos os anexos do stdin e retorna stdout que pode ser útil:

#!/usr/bin/perl -w
use strict; 

use Mail::Audit; 
use Mail::Audit::Attach qw(Attach); 

my $mail = Mail::Audit->new; 

my $attachments = $mail->attachments; 

foreach (@$attachments) 
{ 
      $_->remove; 
} 
$mail->print();

e que um simples loop sobre os arquivos em seu Maildir, você quer remover os anexos de isntance:

for filename in <list> 
do 
  ./strip.pl < "$filename" > "$filename".lock && mv "$filename".lock "$filename" 
  rm "$filename".lock
done 

Uma modificação interessante pode ser extrair primeiro os anexos e armazená-los separadamente antes de excluí-los dos correios:

foreach (@$attachments) 
{ 
      $_->save("/path/to/attachment/dir");
      $_->remove; 
}

Faça um backup primeiro;)

    
por 17.12.2014 / 18:45
0

Você pode usar o Thunderbird e o Addon AttachmentExractor para isso. Basta adicionar sua conta de e-mail ao Thunderbird e iniciar o AttachmentExtractor. Ele pode remover o conteúdo dos anexos enquanto mantém o nome dos anexos no seu correio.

    
por 24.03.2016 / 12:57
-1

Remover os anexos no servidor é muito fácil, eles são apenas arquivos (texto). - Aloque e-mails, tendo um anexo (geralmente os maiores):

find -P /home/*/mail/*/*/* -mindepth 1 -maxdepth 1 -name "*=*" -size +2M -mtime '+367'

Funciona 100% no servidor WHM com o diretório mail, não testado com mbox

  • Fazer um loop pelos arquivos
  • if grep -e '------=_' ${file}; # contendo strings .... então
  • divida os e-mails com critérios comuns, por exemplo: csplit --prefix=split4mail2clean. -z ${file} /commonstring/
  • alocar / localizar nos arquivos divididos que você tiver, os anexos terão algumas cadeias típicas, excluir essas partes
  • junte-se aos arquivos divididos temporários restantes (aqueles sem os anexos típicos) na ordem inversa para reconstruir o email original
  • reaplicar o registro de data e hora da modificação
  • faça outras coisas aqui, se necessário

Para ter sucesso, você pode precisar de 3, 4 possíveis mais condições IF e excluir se o arquivo contiver essa string ... Execute este script de shell recomendado a partir de uma pasta temporária, ajuste os tamanhos e outros critérios de pesquisa. Sim, eu tenho um script de trabalho, testei em alguns 40000 arquivos de mensagens e está deixando 0 anexos, dentro dos critérios de pesquisa e exclusão especificados.

    
por 10.05.2018 / 15:26

Tags