1

私は parsec と呼ばれる Haskell 解析ライブラリを学習しています。この目的のために、電子メール メッセージを解析する必要があります。仕様を調べたり、さまざまなクライアントからのさまざまなメッセージを比較したり、rfc を読んだりしています。

この演習で必要なのは、"From:" ヘッダーと実際のプレーン テキスト本文を抽出することだけです。現在、すべてのクライアントは、仕様に関して正気の、または少なくとも逸脱していないメッセージを生成しているようです。唯一の違いは見通しです(なぜか驚きません)。

したがって、標準的な方法は、myu の読みによると、境界シーケンスに次のように言わせることです。

Content-Type: multipart/alternative; boundary=047d7b2e4e3cdc627304eb094bfe

マルチパートボディのすべての部分は、この境界シーケンスによって区切られていますよね? 私が間違っている場合は、私を修正してください。パーサーがすべての可能なクライアントで動作することを望みます。

なのでよくあるパターンは

--boundary
headers
part

--boundary
headers
part

...

ここで、Outlook によって生成されたメッセージを見ると、別の図が表示されます。ある種のサブ境界を使用していますが、それが標準かどうかわかりませんか? これは見通しの変種です

Content-Type: multipart/related;
    type="multipart/alternative";
    boundary="----_=_NextPart_001_01CEE199.851D3871"

すると、本体はこのように区切られます

------_=_NextPart_001_01CEE199.851D3871
Content-Type: multipart/alternative;
    boundary="----_=_NextPart_002_01CEE199.851D3871"

----_=_NextPart_002_01CEE199.851D3871
headers
body part

----_=_NextPart_002_01CEE199.851D3871
headers
body part

------_=_NextPart_001_01CEE199.851D3871

つまり、配列 001 の外側境界と、配列 002 の内側境界があります。では、これは何でしょう? これはある種の Microsoft 独自の MIME 仕様ですか、それとも私が見逃した rfc にありますか? これは解析がより複雑です。

4

1 に答える 1