Puis-je analyser un email enregistré en tant que fichier texte et récupérer / enregistrer son attachement en utilisant Perl?
-
29-09-2019 - |
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?
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--'