私は電子メールのMIME部分をデコードするためにMIME :: Parserを理解しようとしているperlの初心者です。私は主にそれを動作させていますが、コードが不足しているか、またはメッセージが正しくデコードされない原因となる他の問題があります。MIME :: Parserを使用していくつかの電子メールのデコードに失敗しました
これらはUbuntuのセキュリティメーリングリストから受け取ったメールです。どういうわけか彼らはテキストを通して奇妙なÂ文字を作り出しますが、アルパインを使って電子メールを読むとそれをうまく解読するようです。ここで
 Felix Wilhelm, Fermin J. Serna, Gabriel Campana and Kevin Hamacher
 discovered that Dnsmasq incorrectly handled DNS requests. A remote
 attacker could use this issue to cause Dnsmasq to crash, resulting in
 a denial of service, or possibly execute arbitrary code.Â
 (CVE-2017-14491)`
は、私はこのために使用しているコードスニペットです:
use MIME::Parser;
use MIME::Entity;
use MIME::WordDecoder;
use MIME::Tools;
use MIME::Decoder;
use Email::MIME;
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);
my $subject = $entity->head->get('Subject');
my $from = $entity->head->get('From');
my $AdvDate = $entity->head->get('Date');
my @mailData;
my $msg = Email::MIME->new($buf);
$msg->walk_parts(sub {
my ($part) = @_;
#warn($part->content_type . ": " . $part->subparts);
if (($part->content_type =~ /text\/plain$/i) && [email protected]) {
#print $part->body;
@mailData = split('\n', $part->body);
}
elsif (($part->content_type =~ /text\/plain; charset=\"?utf-8\"?/i) && [email protected]) {
#print $part->body;
@mailData = split('\n', $part->body);
}
elsif (($part->content_type =~ /text\/plain; charset=\"?us-ascii\"?/i) && [email protected]) {
#print $part->body;
@mailData = split('\n', $part->body);
}
elsif (($part->content_type =~ /text\/plain; charset=\"?windows-1252\"?/i) && [email protected]) {
#print $part->body;
@mailData = split('\n', $part->body);
}
elsif (($part->content_type =~ /text\/plain; charset=\"?iso-8859-1\"?/i) && [email protected]) {
#print $part->body;
@mailData = split('\n', $part->body);
}
});
後、私は$ bufの上のさまざまな操作を行うことがデコードされていた後、ここで
は、電子メールから1つのスニペットがありますそれをデータベースに書き込む前に。
私はここ
https://pastebin.com/raw/2csUvWup
この問題を呈する私は適切にこのメールを復号化するために提供することができ、他のどのような情報お知らせください電子メールのいずれかのコピーを配置しました。
謝罪します。あなたのオファーのお手伝いをしてくれてありがとう。ここに適切なペーストビンです。 https://pastebin.com/raw/hB7N3h8a またbody_strを使用しようとしましたが、これも機能しませんでした。元の投稿を編集できないようです。ここに私が作成したスクリプトへのペーストビンがあります。 https://pastebin.com/f1pZBvep –
@AlexRegan:スニペットがどこから得られたのか分かりませんが、データがutf8なので、utf8の出力を使用する必要があります。つまり、STDOUT 'binmode(STDOUT、":utf8 ");'。そしてあなたはutf8対応ソフトウェアでファイルを読まなければなりません。 –
私は分かりません。これは私が書いたコードです。このことをさらに混乱させないために、私はこのデータを書き込む関数をデータベースに除外しました。 utf8については何も知らない。 MIME :: Parserの目的は添付ファイルの種類を標準のテキストにデコードすることだと思った。それが私の必要なものです。 –