Могу ли я проанализировать письмо, сохраненное в виде текстового файла, и извлечь / сохранить его вложение с помощью Perl? - PullRequest
1 голос
/ 29 ноября 2010

Я использую Perl & MAIL :: IMAPClient для сохранения писем из Gmail в виде .txt файлов с использованием метода IMAPClient:

message_to_file

Этифайлы, похоже, содержат вложения электронных писем, закодированные в виде текста.

Вот некоторые текстовые файлы:

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

Я не могу найти какой-либо метод, который сохранит вложение отдельно.Есть ли способ сделать это с помощью разбора?

Ответы [ 2 ]

2 голосов
/ 29 ноября 2010

То, что у вас есть, это необработанный текст сообщения электронной почты в кодировке MIME. Большинство языков имеют MIME-библиотеку общего назначения для их анализа. Быстрый поиск на CPAN показывает, что MIME :: Parser может помочь:

use MIME::Parser;

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

$entity->dump_skeleton;

При этом будут выгружены различные части письма, хранящиеся в текстовом файле test.txt, в / var / tmp Посмотрите документы MIME :: Parser для получения дополнительной информации.

1 голос
/ 29 ноября 2010

Это предложение для обходного пути.Вы будете использовать эту логику после того, как пройдете заголовки.

use MIME::Base64;

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

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

Примечание : я считаю само собой разумеющимся, что вы знаете, как работают многокомпонентные формы MIME, поэтому я не обсуждаюкак программно получить делитель '--0015174c1274ee7ca60495ca69d5--'.

...