ちなみに、MIME ヘッダーは (ほとんど?) HTTP ヘッダーと同じなので、Erlang に組み込まれている HTTP デコードを使用できます: (データは文字列ではなく、バイナリでなければなりません)
3> erlang:decode_packet(httph, <<"Delivered-To: xyz@geodesic.com\nReceived: by 1.gnu.geodesic.net (fdm 1.5, account \"mail\");\n\tFri, 03 Jul 2009 16:56:03 +0530\n">>, []).
{ok,{http_header,0,"Delivered-To",undefined,
"xyz@geodesic.com"},
<<"Received: by 1.gnu.geodesic.net (fdm 1.5, account \"mail\");\n\tFri, 03 Jul 2009 16:56:03 +0530\n">>}
4> Rest = element(3, v(-1)).
そうです、レコードの最初のヘッダーhttp_header
と残りのデータを取得しました。
<<"Received: by 1.gnu.geodesic.net (fdm 1.5, account \"mail\");\n\tFri, 03 Jul 2009 16:56:03 +0530\n">>
5> erlang:decode_packet(httph, Rest, []).
{more,undefined}
しかし、デコーダーは次の行を見なければヘッダー行が次の行に続くかどうかを知ることができないため、これは機能しません。最後の空行を追加する必要があります。
6> erlang:decode_packet(httph, <<Rest/binary, "\r\n">>, []).
{ok,{http_header,0,"Received",undefined,
"by 1.gnu.geodesic.net (fdm 1.5, account \"mail\");\n\tFri, 03 Jul 2009 16:56:03 +0530"},
<<"\r\n">>}
そして、それがすべて残っているとき、次のようになりますhttp_eoh
:
7> erlang:decode_packet(httph, <<"\r\n">>, []).
{ok,http_eoh,<<>>}
お役に立てば幸いです…</p>