Могу ли я анализировать электронную почту, сохраненный как текстовый файл и извлеките / сохранить его вложение, используя Perl?

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

Вопрос

Я использую 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--

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

Это было полезно?

Решение

То, что у вас есть необработанный текст сообщения электронной почты, закодированное 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 to / var / tmp. Проверьте документы MIME :: Parser для дальнейших вариантов.

Другие советы

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

use MIME::Base64;

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top