Posso analizzare una email salvata come un file di testo e recuperare/salvare il suo attaccamento utilizzando Perl?

StackOverflow https://stackoverflow.com/questions/4306056

Domanda

Sto usando Perl & MAIL::IMAPClient per salvare le email da Gmail come .txt i file utilizzando il IMAPClient metodo:

message_to_file

Questi file sembrano contenere gli allegati di e-mail codificato come testo.

Ecco alcuni dei file di testo:

--0015174c1274ee7ca60495ca69d5
Content-Type: video/3gpp; name="20101112233055.3gp"
Content-Disposition: attachment; filename="20101112233055.3gp"
Content-Transfer-Encoding: base64
X-Attachment-Id: 1353288501407252480-1

AAAAHGZ0eXAzZ3A0AAADADNncDRtcDQxM2dwNgAFHyltZGF0AAABthAwrMK9/Mue7fM+95wsf9P8
WI7mPzzp/ikijbucv72j7OywVGuh5kBzo89Zra6PihxZg0zadDqihZFpsPJeG36Ihk9qZW+LLQ2u
NEd96vsqgpnLFnhhwGBWgL2Xpt0cXkW....[A LOT MORE CHARS]....AAAQAAAALAAAAAQAAABRzdHN6
AAAAAAAAACAAAAChAAAAIHN0Y28AAAAAAAAABAABHNoAASMaAALYFwAFHeU=
--0015174c1274ee7ca60495ca69d5--

Non riesco a trovare un metodo che possa salvare l'allegato separatamente.C'è un modo per farlo tramite l'analisi?

È stato utile?

Soluzione

Quello che devi c'è il testo grezzo di un messaggio e-mail con codifica MIME. La maggior parte delle lingue hanno una biblioteca MIME uso generale per l'analisi di questi. Una veloce ricerca su CPAN rivela che MIME :: Parser potrebbe fare il trucco :

use MIME::Parser;

open(FH, '/var/tmp/test.txt');
my $parser = new MIME::Parser;
my $entity = $parser->parse(\*FH) or die;

$entity->dump_skeleton;

Questo permette di scaricare le varie parti della posta elettronica memorizzati nel file di testo semplice test.txt in / var / tmp. Controlla la documentazione MIME :: Parser per ulteriori opzioni.

Altri suggerimenti

Questo è un suggerimento per risolvere il problema.Vuoi intraprendere questa logica, dopo aver passato le intestazioni.

use MIME::Base64;

my $attachlines = '';
while ( <$input> ) { 
    last if index( $_, '--0015174c1274ee7ca60495ca69d5--' ) == 0;
    $attachlines .= $_;
}

my $attach = MIME::Base64::decode( $attachlines );

Nota:Prendo per scontato che tu sappia come MIMO multi-moduli di lavoro, quindi non mi parlate di come a livello di programmazione di ottenere il divisore '--0015174c1274ee7ca60495ca69d5--'.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top