У меня есть Perl-скрипт, который использует MIME :: Email для разбора электронных писем, полученных от stdin, но он не работает на электронных письмах без частей. У меня нет возможности изменять электронные письма до их отправки.
Я бы хотел иметь возможность идентифицировать значительную часть письма независимо от того, является ли он HTML или текстом, и сохранить его в буфере для последующей обработки. Многие из этих писем принадлежат списку рассылки, который каким-то образом генерируется автоматически.
Иногда кажется, что у них только один заголовок "Content-Type:" без границ.
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
В других случаях они имеют несколько текстовых / простых частей, где один - это тело письма, а другой - подпись.
После этого есть несколько других строк заголовка, но затем тело просто отображается без каких-либо граничных маркеров.
Это мое сообщение от двухлетней давности, показывающее, как мне удалось со временем разобраться, как разбирать большинство писем по частям.
Разбор электронной почты с электронной почтой :: MIME и multipart / смешанный с частями
use strict;
use MIME::Parser;
use MIME::Entity;
use Email::MIME;
use Email::Simple;
my $parser = MIME::Parser->new;
$parser->extract_uuencode(1);
$parser->extract_nested_messages(1);
$parser->output_to_core(1);
my $buf;
while(<STDIN> ){
$buf .= $_;
}
my $entity = $parser->parse_data($buf);
$entity->dump_skeleton;
my $num_parts = $entity->parts;
for (my $i=0; $i < $num_parts; $i++) {
my $part = $entity->parts($i);
my $content_type = $part->mime_type;
my $body = $part->as_string;
print "body: $body\n";
}
Основной текст никогда не печатается. Только следующее из dump_skeleton:
Content-type: text/plain
Effective-type: text/plain
Body-file: NONE
Subject: Security update
Мне бы очень хотелось, чтобы у меня была возможность изменить свой существующий скрипт (как показано в предыдущем сообщении об обмене стеками), чтобы можно было печатать подобные письма без каких-либо границ.
Это плохое форматирование? Мне не удалось найти какие-либо примеры библиотеки, которую можно использовать для надежной печати основного текста, темы и других основных заголовков электронного письма без сложных шагов по анализу всего сообщения по частям.
Я знаю, что mimeexplode может это сделать, но я не могу понять, как. Мне нужно хранить почтовое тело в буфере для манипулирования, поэтому использование программы командной строки, такой как mimeexplode, было бы обходным способом сделать это в любом случае.