• 締切済み

multipart/MIMEパーサ-

multipart/MIMEのパーサー探しています。 探し方よくないか、理解できないか、どうも混乱しています。 読みたいファイルのヘッダー情報格納されている部分はContent-Type: text/xml;UTF-8式になっていて、IEEE754/float式で格納されている部分(バイナリ部分)はContent-Type: application/octet-streamになっています。 バイナリデータとヘッダー情報の間、--MIME_boundary-2などで区別されています。 上記なようなファイルをJavaでどうやって読むのでしょうか? DataInputStream使って一つバイトづつ読んで又いろいろString処理してやろうと思ってたのですが、非常に時間かかって(それでもまだ成功していないですが)ものにならない。 既存のパーサーあるはずとの思い強い。 以前、ここで少し教えてもらったことありますが、ググってもどのクラスを使うのか分かりません。 Java標準にはそのようなライブラリーはなさそうですが。。 ググって見つかったのはIBM/Lotus ソフトウェアのMIME Entity クラス。これって、「proprietary」ではないかな。もちろんjavaみたいなフリーライブラリーがほしいんです。 もう一つ見つかったのはmime4j.使い方今から調べます。 multipart/MIME扱い経験ある方々、教えてください。 とりあえず、キーワード見つかって、ネットで見つかったら読んで、理解できるのかみてみたいです。 よろしくお願いします。

  • Java
  • 回答数1
  • ありがとう数5

みんなの回答

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

そのマルチパートメッセージがHTTPリクエストボディなのであればApache Commons FileUploadを使えばいいと思う。 ライセンスはもちろんApache License 2.0。 そのマルチパートメッセージが電子メールなのであればJavaMailを使えばいい。 http://www.oracle.com/technetwork/java/javamail/index.html ライセンスはJavaMail 1.4はthe Oracle Binary Code License Agreement for Java EE Technologies。プロプラなライセンスなんだけど、JavaMailに関してはロイヤリティーフリーであるとOracle社が明言している。ソースコードの提供は無い。 JavaMail 1.5はCDDL v1.1 and GPL v2 with Classpath Exceptionだ。 JavaMailは本来SMTPでメールを送信したりPOP3やIMAP4でメールを受信したりする時に使うJava標準拡張パッケージライブラリなんだけど、マルチパート電子メールの作成・解析の機能も持っているのでそこだけ使えばいい。 CDDL v1.1 and GPL v2 with Classpath ExceptionはCDDLとして使用すればあなたが開発した部分のソースコードは公開しなくて良いはずだが、ライセンス問題に敏感である場合はJavaMail 1.4.7を使うのが吉だろう。

x201s-goo
質問者

お礼

anmochiさん コメントありがとうございます。 問題はこの読み取りしたいファイルはHTTPリクエストボディも電子メールもないです。 ある機械が出力した膨大なデータ(グラフで見ると10~11桁の数値です。)が格納されているファイルです。データの説明のため、XML式でヘッダー情報もあります。 以下、ファイルを簡単化したサンプルです。 //------------------------- MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="MIME_boundary-1"; type="text/xml"; Content-Description: 何か説明文 --MIME_boundary-1 Content-Type: text/xml; charset="UTF-8" Content-Transfer-Encoding: 8bit Content-Location: dataHeader.xml <?xml version="1.0" encoding="UTF-8"?> <Header> dataSize =123456 </Header> --MIME_boundary-2 Content-Type: application/octet-stream Content-Location: data.bin XXXXXXXXXX ここに上記dataSize分のバイナリ(float)データあります --MIME_boundary-2 このような場合ですが、「data.bin」以下、次の境目(boundary)見つかるまで(つまり、dataSize分)のデータを読み、配列等に保存したいです。 非常に大きいデータ量ですのでstring処理で一バイト筒読むのはだめです。ですのでパーサーを使いたいです。 困っています。 よろしくお願いします。

関連するQ&A

  • MIMEとバイナリデータの読み方

    バイナリファイルの中、MIME boundary1の後、ヘッダーの部分のXMLで書かれたテキストファイルあります。そのXMLヘッダー文をパースしたい。 バイナリファイルのほかのところにMIME boundary2の後バイナリ形式のデータあります。 Googleで調べたけど、なにかは見つかったけど、理解できず困っています。 バイナリファイルを一バイトづつ読んで、Integer.toHexString()を使うとASCIIの形でXMLの部分はそのまま (フォーマットなしで)、バイナリデータの分は化けた表示されます。 だいたいのアウトラインでよいです。やり方ご存知の方、教えてください。 (1)boundary1の後書かれたXML式データを読む方法 (2)boundary2の後、決まったキーワードが入っていたら、そこから決まったバイト数までのバイナリデータを読む方法 その決まったキーワードと決まったバイト数はヘッダーのXML内に書かれています。

    • ベストアンサー
    • Java
  • PHP Windows版のmail()を使用して添付ファイルを送りたい

    はじめて、質問させていただきます。 環境はWindowsXP(Pro)+IIS+PHPです。 PHPのmail()関数を使用して、添付ファイルをメールで送信したいと考えております。 mail("-----@co.jp",$subject,$msg,$headers);を実行します。 $headersは、追加ヘッダということになっています。 $boundary="-*-*-*-*-*-*-*-*-*-Boundary_".uniqid("b"); とセットし、 $headersには、 $headers=Content-Type:multipart/mixed; $headers.=boundary=$boundary; として、実行します。 送られてきたメールのヘッダの内容を確認すると 「Content-Type」が、 Content-Type:text/plain; となってしまいます。 mail()関数のヘッダの指定方法は、これでいいのでしょうか? 実際のコードは、メッセージ部分などいろいろ書き込んでいます。いろいろ書き換えて実験してみましたが、どうも、この問題をクリアできないと添付ファイルメールを送信することができないようです。 ご存知の方があれば、教えていただきたいです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • S/MIMEでの署名

    RFCのサンプルは次のようになっていました。 Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary=boundary42 --boundary42 Content-Type: text/plain This is a clear-signed message. --boundary42 Content-Type: application/pkcs7-signature; name=smime.p7s Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=smime.p7s ghyHhHUujhJhjH77n8HHGTrfvbnj756tbB9HG4VQpfyF467GhIGfHfYT6 4VQpfyF467GhIGfHfYT6jH77n8HHGghyHhHUujhJh756tbB9HGTrfvbnj n8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHhHUujpfyF4 7GhIGfHfYT64VQbnj756 --boundary42-- ここでは、 This is a clear-signed message. に対する署名が、 ghyHhHUujhJhjH77n8HHGTrfvbnj756tbB9HG4VQpfyF467GhIGfHfYT6 4VQpfyF467GhIGfHfYT6jH77n8HHGghyHhHUujhJh756tbB9HGTrfvbnj n8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHhHUujpfyF4 7GhIGfHfYT64VQbnj756 ということでしょうか? 日本語を扱う場合は、 エディターのデータではなくて、送信直前のバウンダリーで囲まれたデータに対して 署名がなされる。 と理解してよろしいでしょうか? さらに、添付ファイルがつく場合には、 Content-Type: multipart/mixed; boundary=bar --bar Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable =A1Hola Michael! How do you like the new S/MIME specification? It's generally a good idea to encode lines that begin with From=20because some mail transport agents will insert a greater- than (>) sign, thus invalidating the signature. Also, in some cases it might be desirable to encode any =20 trailing whitespace that occurs on lines in order to ensure =20 that the message signature is not invalidated when passing =20 a gateway that modifies such whitespace (like BITNET). =20 --bar Content-Type: image/jpeg Content-Transfer-Encoding: base64 iQCVAwUBMJrRF2N9oWBghPDJAQE9UQQAtl7LuRVndBjrk4EqYBIb3h5QXIX/LC// jJV5bNvkZIGPIcEmI5iFd9boEgvpirHtIREEqLQRkYNoBActFBZmh9GC3C041WGq uMbrbxc+nIs1TIKlA08rVi9ig/2Yh7LFrK5Ein57U/W72vgSxLhe/zhdfolT9Brn HOxEa44b+EI= --bar-- それぞれの部分に対して、署名をつくり、 結果として、 さらに2つの署名がくっついているメールを送信する と理解してよいのでしょうか? よろしくお願いします。

  • MIME emlの解析に関して

    Perlにて、 emlの本文(htmlとplain)の取得をしたいです。 ライブラリとして、 Email::MIME を使用しております、現在以下の様な感じです。 my $parsed = Email::MIME->new($text); for my $part ($parsed->parts) { if($part->{ct}{discrete} !~ /^text/){ }elsif($part->content_type =~ m|text/html|){ #html }else{ #plain } この状態で$part->body_strや$part->bodyで取得が可能かと考えておりましたが、 emlにて入れ子構造が上手く取得出来ず、困っております。 やり方等、如何様でも構いませんので、ご指摘頂ければ幸いで御座います。 sampleのEML※サンプルなのでhtmlはhtml形式になっておりません。 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Return-Path: <test@test.jp> X-Original-To: test@test.jp Delivered-To: test@test.jp X-Env-Sender: test@test.jp Date: Wed, 7 Dec 2011 02:48:11 -0600 (CST) From: <test@test.jp> To: test@test.jp Subject: =?UTF-8?B?dGVzdA==?= =?UTF-8?B?dGVzdA?= =?UTF-8?B?dGVzdA?= =?UTF-8?B?dGVzdA==?= Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_33646_1423332566.1323247678520" ------=_Part_33646_1423332566.1323247678520 Content-Type: multipart/alternative; boundary="----=_Part_33649_2021685376.1323247678532" ------=_Part_33649_2021685376.1323247678532 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 dGVzdA == ------=_Part_33649_2021685376.1323247678532 Content-Type: text/html;charset=UTF-8 Content-Transfer-Encoding: base64 dGVzdA== ------=_Part_33649_2021685376.1323247678532-- ------=_Part_33646_1423332566.1323247678520-- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    • ベストアンサー
    • Perl
  • MIMEヘッダ

    こんにちは。質問をさせてください。 今、PHPのsendmail関数を使用してHTMLメール・テキストメールを送信しようと考えています。 ------------------------------------------------ ### メールの送信 open MAIL, "|/usr/sbin/sendmail -f "****@aaa.co.jp" "****@bbb.co.jp""; ### 全体のヘッダ print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-Type: Multipart/Mixed; boundary=\"--=kuguri\"\n"; print MAIL "Content-Transfer-Encoding:Base64\n"; print MAIL "From: $from\n"; print MAIL "To: $to\n"; print MAIL "Subject: $subject\n"; ### テキストメール本文のパート print MAIL "--=kugiri\n"; print MAIL "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n"; print MAIL "\n"; print MAIL "HELLO\n"; ### HTMLメール本文のパート print MAIL "--=kugiri\n"; print MAIL "Content-Type: text/html;\n"; print MAIL "\n"; print MAIL "<html><body>\n"; print MAIL "<font color="red">HELLO</font>\n"; print MAIL "</body></html>\n"; ### マルチパートのおわり。 print MAIL "--"\kugiri"\" . "--\n"; close MAIL; 上記のような記述の場合、受信側のメーラが HTML設定の時は、"HELLO(赤色)" TEXT設定の時は、"HELLO(黒色)"で受信しますでしょうか? スクリプトの抜粋でわかりにくいと思いますが、宜しくお願い致します。

  • 件名、差出人がないメールが届きました

    件名、差出人がないメールが届きました。 これって、ウィルスの可能性があるものでしょうか? この様な物は初めてです。 下記にメールのヘッダ(一部)を記します。 普通、Subject: From:などがあると思うのですがありません。 宜しくお願いします。 Content-Type: multipart/mixed; boundary="--VEXQFKH2RG1QV4TYN" X-UIDL: >V]"!ph:!!\K$#!_76!!

  • テキストファイルのアップロードについて

    HTMLよりアップロード対象のテキストファイル(csv)パスが指定された場合、送られてくるcontent-typeがoctet-streamとなりますが正しいのでしょうか?何だかバイナリデータ扱いとなってしまい格納データがバイトコードになってしまいます・・・。multipart/form-dataでPOSTしているだけなのですが・・・

  • 文字化けメールとdat添付書類について

    windows XP でOutlook Expressを使用しています。 Outlook Expressをメーラーとしてあんまり使用したくないのですが、プロバイダーがAOLなので仕方なくOutlook Expressで受信しています。 今まで正常に仕事先からlzh添付ファイルを受信出来ていたのですが、先日添付ファイルが「・・・lzh.dat」となっていて圧縮されたデーターを解凍するとテキストデーターが文字化けで入っていました。 もう一台のPCの違うメーラーで受信しても添付ファイルは削除されているものの文字化けは同じ状態でした。 これは相手がhtml形式で送信しているからでしょうか? それとウィルスが入ってしまっているのでしょうか? ご存じの方教えてくださいませ。 下記にヘッダーに記載されたものを付けておきます。 よろしくお願いします。 From: =?iso-2022-jp?B?GyRCOzBDUjkpNkgtakBfN1cbKEI=?= <ocn.ne.jp> To: Subject: =?iso-2022-jp?B?Rnc6IBskQj9eTEw6RkF3Py4bKEI=?= Date: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.2869 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869 This is a multi-part message in MIME format. ------=_NextPart_ Content-Type: multipart/alternative; boundary="----=_NextPart_" ------=_NextPart_ Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit

  • メールの添付ファイルが認識されない。

    メールに添付ファイル(jpeg)を付けて、(auの)携帯へ送信すると、受信した携帯でヘッダ部分がそのまま展開(添付ファイルのデータがMIMEでそそまま表示)されてしまう事態になってしまいます。 PCのMUAでは添付ファイルとして認識されています。 携帯に送る際はなにか特別なことをする必要があるのでしょうか? 添付のヘッダは、 1.添付ファイルを読み込んでMIMEに変換する。 2.ヘッダの最後に、 --境界  Content-Type: image/jpeg; name="file"  Content-Transfer-Encoding: base64  Content-Disposition: attachment; filename="file"  添付ファイルのMIME を追加する。 3.mail()の第4引数に作ったヘッダを放り込む。 このようなステップで送信しています。

    • ベストアンサー
    • PHP
  • Eudora-Jで着信してしまったメール

    Eudora-J で着信してしまったメールが HTMLコードを含むもので一部文字化けしていて読めません。 マシンは、OS9で動いているもの、OS 10.4で動いているものの 二台があります。どうやったら読めるようになるでしょうか? メールの先頭には以下のようにかかれています This is a multi-part message in MIME format. ------msg_border Date: Tue, 21 Feb 2006 04:10:33 -0800 Content-Type: multipart/alternative; boundary="----alt_border_1" ------alt_border_1 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: quoted-printable

    • ベストアンサー
    • Mac

専門家に質問してみよう