Posso analizzare una email salvata come un file di testo e recuperare/salvare il suo attaccamento utilizzando Perl?
-
29-09-2019 - |
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?
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--'
.