javamail & partインタフェースについて

このQ&Aのポイント
  • javamailAPIを使ってメールの送受信処理を作っています。
  • 添付ファイル受信処理で参考にしたのはhttp://javadrive.tripod.co.jp/javamail/mailer/index.htmlです。
  • 他の一般メーラーを使って送信後、このメーラーの受信の処理に流れない問題が発生しています。
回答を見る
  • ベストアンサー

javamail & partインタフェースについて

javamailAPIを使ってメールの送受信処理を 作っています。 添付ファイル受信処理で参考にしたのは http://javadrive.tripod.co.jp/javamail/mailer/index.html ここです。 メール受信時、 public String dumpPart(Part p) throws Exception { ・・・・ } のなかの処理でメールの内容取り出しをしています。 ここのサンプルメーラーを使ってメッセージを送受信した 場合、XMLファイルが添付ファイルだと、 InputStreamとして添付ファイルは認識されます。 が、他の一般メーラーを使って送信後、このメーラーの 受信の処理(メーラーは用いない)を行った場合、 Stringとして認識されるため、添付ファイルの 処理に流れません。 何か、対策ありましたら教えてください。

noname#2205
noname#2205
  • Java
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • MarrowG
  • ベストアンサー率53% (41/76)
回答No.1

他のメーラーがXMLファイルを添付ファイルではない形で送っているのではないでしょうか? 通常、添付ファイルはMIME形式でいうところのmultipart形式で送られてきます。 dumpPartメソッドも恐らくそれを期待しているのだと思います。 #ソースを読んでないので、はずしてるかもしれませんが。 他の一般メーラーの設定を確認してみてください。

noname#2205
質問者

補足

回答ありがとうございます >他のメーラーがXMLファイルを添付ファイルではない形で >送っているのではないでしょうか? そのようですね ただ、XMLファイルだと、InputStreamとして みなすことが前提のようですね、ソースによると。 Stringと認識しても Part p; Object o = p.getInputStream() ; とすることであとは同じ処理(InputStreamと)を 流すことによって解決しました。 ありがとうございました。

関連するQ&A

  • javamail

    javamailをつかってメールの受信(添付ファイル付) のプログラムをつくりたいのですが サンプルやよく分かるサイトを知りたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • JavaMail のサンプルコード

    PCのOSは、Windows 7 64bit です。 Eclipse で Android のメールソフトを作っています。 Gメールにimaps で接続しています。 メール本文は取り出せたのですが、添付されている画像ファイルが取り出せません。 参考にしているのは、JavaMail API (Elliotte Rusty Harold) です。 この中のJavaMail のサンプルコードを利用しようとしたのです。 説明では、base64 デコードも勝手にやってくれるようになっていると 理解したのですが、添付ファイルを取り出すことが出来ません。 デバッグを続けていると、PCが動かなくなってきます。 修復セットアップが必要になりました。 サンプルコード if (fileName == null) { // likely inline p.writeTo(System.out); } else { File f = new File(fileName); // find a file that does not yet exist for (int i = 1; f.exists(); i++) { String newName = fileName + " " + i; f = new File(newName); } try ( OutputStream out = new BufferedOutputStream(new FileOutputStream(f)); InputStream in = new BufferedInputStream(p.getInputStream())) { // We can't just use p.writeTo() here because it doesn't // decode the attachment. Instead we copy the input stream // onto the output stream which does automatically decode // Base-64, quoted printable, and a variety of other formats. int b; while ((b = in.read()) != -1) out.write(b); out.flush(); } } } catch (IOException| MessagingException ex) { ex.printStackTrace の、 OutputStream out = new BufferedOutputStream(new FileOutputStream(f)); の部分でエラーとなります。 解決方法を教えていただきたいと思います。 Header情報は取り出せるので、 バイナリデータとして取り出し保存してから、 自分で、base64デコード をすればよいような気もしますが、 日本語が絡む場合は、上記のサンプルコードは使えないのでしょうか? それとも、サンプルコードで添付ファイルを取り出せるのでしょうか? よろしくお願いします。

  • javamailにてメール文字化け

    javamailにて文字コードutf-8にてメール配信ソフトを作ってみたのですが、私の使っているモバイル nexus7のフリーメールに受信成功したのだが、文字化けしてしまいました。nezus7のメールソフトの エンコードがutf-8でないからだと判断。javamailの文字コードを途中でutf-8から該当しそうな(iso-2022-jpなど)にデコードしてから送信。しかし文字化けが治らず挫折してしまいました。utf-8なら 対応していると思ったのですが…。nexusの文字コードをどのように取得することができるかどなたかわかる方ご教授の程宜しくお願い申し上げます。 尚、content = new String(content.getBytes("utf-8"),"");""の部分にnexus7の文字コードに該当しそうな文字コードを数種類入れて実験!?してみました。どれも失敗。

    • ベストアンサー
    • Java
  • [Android+Javamail]送信できません

     こんにちは  Javamailを使ってAndroid用メールアプリの開発を志しているものです。  以下のサイトを参考にさせてもらってコードを作ってエミュレーターで動かしてみました。 http://yamato-iphone.blogspot.jp/2011/12/javamail.html http://d.hatena.ne.jp/ttshrk/20110517/1305641955 http://yaim.blogzine.jp/ability/2012/04/javamail_androi.html  ところが、下記のようなエラーで、メール送信ができませんでした。 12-23 10:56:36.225: W/System.err(541): javax.mail.MessagingException: Could not connect to SMTP host: smtp.hogehoge.jp, port: 587; 12-23 10:56:36.225: W/System.err(541): nested exception is: 12-23 10:56:36.235: W/System.err(541): javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x199c48: Failure in SSL library, usually a protocol error 12-23 10:56:36.235: W/System.err(541): error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:683 0x401e0c93:0x00000000)  また、 12-23 10:56:35.385: I/System.out(541): DEBUG: not loading file: /system/lib/javamail.providers 12-23 10:56:35.385: I/System.out(541): DEBUG: java.io.FileNotFoundException: /system/lib/javamail.providers: open failed: ENOENT (No such file or directory)  このようなログも吐き出されており、なにか足りないものがあるようなのですが…  単純なサンプルアプリなどは普通に動作していますので、開発環境にとりあえず不備はないと思います。  Javamail用の3つのファイルもビルドパスに加えてあります。  その他にも追加すべきライブラリがあるのでしょうか?  これだけの情報では、ご回答いただくのは難しいのかも知れませんが…  よろしくお願いいたします。

  • JavaMailの受信処理で質問

    ヤマトです。 JavaMailを使用してメールの送受信ができるようにしました。 メールの送信も受信も基本的には問題なく動作します。 しかし、一点問題がありまして、メール受信時なのですが、受信したメールをメールサーバから取得した後、 そのメールをメールサーバに残したままにしてしまいます。 (なのでもう一度実行すると同じメールを受信してしまいます) 受信した後メールサーバから削除したいのですが、調べたのですが、分かりません。 どなたか、以上の件に関し、ご教授願えますでしょうか? 以下に、作成したメール受信のソースを載せます。 javamail-1_2.zip とjaf1_0_1.zip をダウンロードして使用しています。JDK1.3です。 宜しくお願い致します。 == メール受信ソース(一部抜粋) // メールサーバーへ接続 Session session = Session.getDefaultInstance(System.getProperties(), null); Store store = session.getStore("pop3"); store.connect(PopServerAddress, -1, MailUser, MailPassword); // メールサーバのフォルダーを開く Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); // フォルダーのメール件数を取得 int totalMessages = folder.getMessageCount(); if (totalMessages == 0) { System.out.println("メールは0件です"); folder.close(false); store.close(); return; } // フォルダーのメールを取得 Message[] messages = folder.getMessages(); // フォルダーを閉じます folder.close(false); store.close();

    • ベストアンサー
    • Java
  • 例外(throws)について

    例外のthrowsがよくわかりません。 (例1) public static void main(String[] args) throws Exception { new testClass().testA(); } void testA() throws Exception { FileReader exFile = new FileReader("exFile.txt"); } (例2) public static void main(String[] args) throws FileNotFoundException { new testClass().testA(); } void testA() throws FileNotFoundException { FileReader exFile = new FileReader("exFile.txt"); } 上記2つの例ではどちらも 「java.io.FileNotFoundException: exFile.txt (指定されたファイルが見つかりません。)」 というログが出力されるようです。 throws ExceptionにしてもFileNotFoundExceptionと判別できるのならば、 あえてthrows FileNotFoundExceptionにする必要がなく、大抵の場合 throws Exceptionにしておけばよいと思うのですが、 その解釈は間違っているでしょうか?

    • ベストアンサー
    • Java
  • Windows Live メール添付ファイル送信

    Windows Live mail で添付ファイル付のメールの送信ができません。 送受信を押すとゲージが途中で止まり、それ以上ゲージが動かなくなり、その後は受信もできなくなるので、一旦メーラーを閉じて再起動する必要があります。 改善方法があれば、教えて下さい。宜しくお願いします。

  • Office2007のOutlookで受信メールが文字化けする

    OSがWin.7でOffice2007のメーラーOutlookを使ってメールの送受信をしていますが、ある人からのメールが文字化けして受信されてしまいます。ある人のメーラーは多分Outlook Expressだと思います。  私のもう一台のPC(OSはWin.XP)でOffice2002のOutlook Expressで受信すると文字化けは起こりません。また、同じメールを受信している友人のPCでは文字化けは起こっていません。ということで原因は私の PC(OSがWin.7)のPCのメーラーOutlookでの受信に原因があるようです。どなたかこのような異常の対策がありましたらご教示いただきたくお願いいたします。  Office2007のメーラーOutlookとOffice2002などのOutlook Expressの間のメールのやり取りでは変なことが起こると聞いています。例えば、Office2007のメーラーOutlookから添付ファイル付きのメールを送るとOffice2002などのOutlook Expressで受信すると添付ファイルが消えてしまうことがある。私はこのことを一度経験しています。

  • throwsについて

    こんにちは。 最近、JAVAの勉強を始めたのですがわからない点がありましたので質問に参りました。 こちらのページに http://msugai.fc2web.com/java/throws.html > コンパイル時に、スローされた例外が呼び出し元でキャッチされているかどうかチェックされます。 > キャッチされていなければ、コンパイルエラーになります。 とあったので試しに以下のようなコードを作りました。 class SampleException { public static void main(String[] args) { //try{ exMethod(); //} //catch(NumberFormatException e){} //catch(Exception e){} } private static void exMethod() throws NumberFormatException { String notnum = "非数値"; int suti = Integer.parseInt(notnum); } } (try~catchはコメントアウトしたまま) この説明の通りならコンパイルエラーが出るだろうと思ったのですが コンパイルしてみると成功してしまいました。 (throwsにExceptionを追加すればコンパイルエラーは出ます。) throws NumberFormatExceptionと記述しておけば このメソッド使うときはNumberFormatExceptionかExceptionの例外処理を 必ずしなくてはならないものだと思っていたのですが これは私の認識違いなのでしょうか? それともコードが何か間違えているのでしょうか? よろしくお願いします。

  • Netscapeでapplication/octet-streamを見るには?

    Webメーラーで、 受信メールを開きますと、 たんなるJPGの添付ファイルが、 Netscapeで見れないことがあります。 メッセージがでます。 ****************************** 開こうとしているファイルは、application/octet-streamです。 Netscapeでは、このタイプのファイルを処理できません。Netscapeでこのファイルをどのように処理しますか? ○標準のアプリケーションで開く ○使用するアプリケーションを選択 ○ファイルをダウンロードして保存する ******************************* ふつうのJPGファイルなんですけど、 受信するWebメーラーの種類か、発信元のメーラーの設定かによって、こういう事態になるようです。 Excite のWebメーラーで受信すると、必ず、こういうことになります。 Netscapeは7.1ですが、6.2でも起こりますので、 バージョンには関係ないようです。 このタイプのファイルをNetscapeで見るには、 どうしたらいいのでしょうか。 教えてくださいませ。お願いします。

専門家に質問してみよう