• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JavaMail のサンプルコード)

JavaMailを使用して添付ファイルを取得する方法

このQ&Aのポイント
  • JavaMailを使用してGmailのimapsに接続していますが、添付された画像ファイルを取得することができません。
  • JavaMailのサンプルコードを使用して添付ファイルを取得しようとしましたが、エラーが発生しました。
  • バイナリデータとして取得し、自分でbase64デコードすることは可能ですが、日本語が絡む場合はサンプルコードが使えない可能性があります。

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

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

Androidでファイルに対して書き込みしようとしているときにエラーなんだから書き込み権限が無いんじゃないかな。 /data/data/<パッケージ名>/filesとか、外部のSDカードとかを選んでますか? で、Androidは気軽にファイルをはく事ができないのでFileOutputStreamの変わりにByteArrayOutputStreamを使ってオンメモリで処理したらどうでしょうか。 どうしてもファイルに落としたい、だけどエラーになる、っつーんならそのエラーの内容を書けば回答が集まりやすいでしょう。後、恐らくStringであろうfileNameの中身。

uyama33
質問者

お礼

ありがとうございます。 ヘッダーファイル が間違っていたので、 修正したら、 変なコメントは出なくなりましたが、 まだ、添付ファイルは取得できません。

uyama33
質問者

補足

ありがとうございます。 PCのバックアップを取りながら慎重に再挑戦しています。 サンプルの前の部分で // Get the messages from the server Message[] messages = folder.getMessages(); for (int i = 0; i < messages.length; i++) { System.out.println("------------ Message " + (i+1) + " ------------"); // Print message headers @SuppressWarnings("unchecked") Enumeration<Header> headers = messages[i].getAllHeaders(); while (headers.hasMoreElements()) { Header h = headers.nextElement(); System.out.println(h.getName() + ": " + h.getValue()); } System.out.println(); // Enumerate parts Object body = messages[i].getContent(); if (body instanceof Multipart) { processMultipart((Multipart) body); } else { // ordinary message processPart(messages[i]); } System.out.println(); } // Close the connection // but don't remove the messages from the server folder.close(false); } catch (MessagingException| IOException ex) { ex.printStackTrace(); } // Since we may have brought up a GUI to authenticate, // we can't rely on returning from main() to exit System.exit(0); } public static void processMultipart(Multipart mp) throws MessagingException { for (int i = 0; i < mp.getCount(); i++) { processPart(mp.getBodyPart(i)); } } public static void processPart(Part p) { Multipart があります。 先日までは、コンパイルはできて、ソフトは暴走していたのですが、 本日は、 processPart(Part p) の部分の、 Part について、aqndroid.provider.Telephony.Mms.Part だと言われたり、 それ以前の部分では、 processPart(messages[i]); processPart(mp.getBodyPart(i)); となっているので、processPart の引数が、message なのか、body なのかと 聞いてきます。 もちろん引数が違うのだから処理が異なるのは当然です。 でも、サンプルコードは、その違いを無視しているし、 昨日まで、コンパイルできていたのはなぜなのか、理解できないことが増えています。

関連するQ&A