Puis-je analyser un email enregistré en tant que fichier texte et récupérer / enregistrer son attachement en utilisant Perl?

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

Question

J'utilise Perl et MAIL :: IMAPClient pour enregistrer des e-mails à partir de Gmail sous forme de fichiers .txt en utilisant la méthode IMAPClient:

message_to_file

Ces fichiers semblent contenir les pièces jointes des e-mails codés sous forme de texte.

Voici une partie du fichier texte:

--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--

Je ne peux pas trouver une méthode qui sauvera la pièce jointe séparément. Est-il possible de le faire via l'analyse syntaxique?

Était-ce utile?

La solution

Qu'est-ce que vous avez, il y a le texte brut d'un message électronique codé MIME. La plupart des langues ont une bibliothèque MIME à usage général pour analyser ces derniers. Une recherche rapide sur CPAN révèle que MIME :: Parser pourrait faire l'affaire :

use MIME::Parser;

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

$entity->dump_skeleton;

videra les différentes parties de l'e-mail stockées dans le fichier texte brut test.txt / var / tmp. Consultez les MIME :: Parser docs pour d'autres options.

Autres conseils

Ceci est une suggestion pour une solution de contournement. Vous engageriez cette logique après avoir été passé les en-têtes.

use MIME::Base64;

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

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

Remarque :. Je prends pour acquis que vous savez comment MIME formulaires multi-travail, donc je ne discute pas comment obtenir le programme diviseur '--0015174c1274ee7ca60495ca69d5--'

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top