javamailを使用してAndroidでメールを取得したい。しかし、私はいくつかの問題に遭遇しました。
POP3では、特定のメールのコンテンツを取得したい場合、javamailは添付ファイルを含むメールのすべてのコンテンツをダウンロードします。添付ファイルが十分に大きい場合、Androidプログラムはoom例外をスローします。しかし、私はIMAPプロトコルで試しました。最初にコンテンツのスケルトンをフェッチするだけで、大きな添付ファイルがいくつかある場合でも、うまく機能します。
では、電子メールに大きな添付ファイルがある場合、pop3プロトコルを使用して特定の電子メールのコンテンツを取得するにはどうすればよいですか?
次のコードはimapでうまく機能しますが、pop3では機能しません。
public void getContent(Part part) throws Exception {
String contentType = part.getContentType();
int nameindex = contentType.indexOf("name");
boolean conname = false;
if (nameindex != -1)
conname = true;
if (part.isMimeType("text/plain") && !conname) {
bodytext.append((String) part.getContent());
} else if (part.isMimeType("text/html") && !conname) {
String html = (String) part.getContent();
Spanned plainText = Html.fromHtml(html);
bodytext.append(plainText);
} else if (part.isMimeType("multipart/*")) {
Multipart multipart = (Multipart) part.getContent();
int counts = multipart.getCount();
for (int i = 0; i < counts; i++) {
BodyPart mpart = multipart.getBodyPart(i);
Log.d("type,"," "+ i+mpart.getContentType());
String disposition = mpart.getDisposition();
if ((disposition != null)
&& ((disposition.equals(Part.ATTACHMENT)) || (disposition
.equals(Part.INLINE))))
continue;
String contype = mpart.getContentType();
if(contype.toLowerCase().indexOf("application")!=-1||contype.toLowerCase().indexOf("name")!=-1)
continue;
getContent(multipart.getBodyPart(i));
}
} else if (part.isMimeType("message/rfc822")) {
getContent((Part) part.getContent());
}
}