2017-03-15 26 views
4

私は複数の部分でMIMEエンコードされた電子メールを解読する方法を理解しようとしているperl初心者です。私は規則のか分からないので、私はちょうど私が信じている電子メールの作品が関連している含まれます:Email :: MIMEとmultipart/signedで電子メールを解析する

Content-Type: multipart/mixed; boundary="===============3385789078715843912==" 
Mime-Version: 1.0 

--===============3385789078715843912== 
Content-Type: multipart/signed; micalg="pgp-sha256"; 
    protocol="application/pgp-signature"; boundary="=-0+dmFxz+BsFOEAAxvudu" 


--=-0+dmFxz+BsFOEAAxvudu 
Content-Type: text/plain; charset="UTF-8" 
Content-Transfer-Encoding: base64 

PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 
PT09PT09PT09PT09PT09PT0KVWJ1bnR1IFNlY3VyaXR5IE5vdGljZSBVU04tMzIxMC0xCkZlYnJ1 
YXJ5IDIzLCAyMDE3CgpMaWJyZU9mZmljZSB2dWxuZXJhYmlsaXR5Cj09PT09PT09PT09PT09PT09 
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 
CgpBIHNlY3VyaXR5IGlzc3VlIGFmZmVjdHMgdGhlc2UgcmVsZWFzZXMgb2YgVWJ1bnR1IGFuZCBp 
dHMgZGVyaXZhdGl2ZXM6CgotIFVidW50dSAxNi4wNCBMVFMKLSBVYnVudHUgMTQuMDQgTFRTCi0g 

私は次のコードのビットを持っている:

my $msg = Email::MIME->new($buf); 

    for my $part ($msg->parts) { 
     if ($part->content_type =~ m!multipart/mixed! 
       or $part->content_type eq '') 
      { 
       print "Found Multipart"; 
       for my $subpart ($part->parts) { 
        print $subpart->body; 
      } 
     } 
    } 

私は本当に次に何をすべきか分からない。私はこれに関して数十の異なるバリエーションを持っていて、それに取り組んだ4時間後には何も近づいていません。署名された電子メールのこのテキスト部分を読むために使用される適切なperlモジュールと関数を誰かが特定するのを助けることができたら、私は感謝します。

+0

まあ、メッセージ本文部分を一番下に手動でデコードすると、適切な出力が得られます。それは良いスタートです。 – simbabque

答えて

3

電子メール:: MIMEのドキュメントには、という愚かな方法があるので、not to use partsが示されています。パーツがない場合は、独自のオブジェクトを返します。それは変です。

代わりにsubparts methodを使用して、電子メールの部分を取得してください。それをもう一度使用して、その部分のすべての部分を繰り返します。何かがあれば、それが入るでしょう。その部分のbodyを印刷すれば完了です。

foreach my $part ($msg->subparts) { 
    foreach my $sub_part ($part->subparts) { 
      print $sub_part->body; 
    } 
} 
+0

私は今、$ sub_part-> bodyの処理方法がわかりません。これは配列ですか? join()またはpush()を使用して行ごとに処理できますか? –

+1

@AlexRegan私は分かりません。私はそれを自分で使ったことはありません。 https://metacpan.org/pod/Email::MIME#bodyにはバイト列と書いてあります。完全なメッセージでなければなりませんが、バイト単位です。デコードする必要があるかもしれません。あなたの例では、正しいテキストが出てきます。 – simbabque

関連する問題