Kann ich eine E-Mail gespeichert als Textdatei und Abrufen / Speichern seiner Befestigung mit Perl analysieren?
-
29-09-2019 - |
Frage
Ich bin mit Perl & MAIL :: IMAPClient E-Mails von Google Mail als .txt
Dateien mit der IMAPClient Methode speichern:
message_to_file
Diese Dateien scheinen die Anhänge von E-Mail als Text codiert zu enthalten.
Hier einige der Textdatei:
--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--
Ich kann keine Methode finden, die die Anlage separat zu sparen. Gibt es eine Möglichkeit, dies zu tun über das Parsen?
Lösung
Was du hast, gibt es den Rohtext eine MIME-codierte E-Mail-Nachricht. Die meisten Sprachen haben eine allgemeine Zweck MIME-Bibliothek diese für die Analyse. Eine schnelle Suche auf CPAN zeigt, dass MIME :: Parser könnte den Trick tun :
use MIME::Parser;
open(FH, '/var/tmp/test.txt');
my $parser = new MIME::Parser;
my $entity = $parser->parse(\*FH) or die;
$entity->dump_skeleton;
Damit werden die verschiedenen Teile der E-Mail in der Klartextdatei gespeichert Dump text.txt in / var / tmp. Schauen Sie sich die MIME :: Parser-Dokumentation für weitere Optionen.
Andere Tipps
Dies ist ein Vorschlag für eine Abhilfe. Sie würden diese Logik engagieren, nachdem Sie vorbei an den Überschriften waren.
use MIME::Base64;
my $attachlines = '';
while ( <$input> ) {
last if index( $_, '--0015174c1274ee7ca60495ca69d5--' ) == 0;
$attachlines .= $_;
}
my $attach = MIME::Base64::decode( $attachlines );
Hinweis . Ich nehme selbstverständlich, dass Sie wissen, wie MIME mehrteilige Formulare arbeiten, so dass ich nicht diskutieren, wie programmatisch den Teiler '--0015174c1274ee7ca60495ca69d5--'
bekommen