0

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());
    }
}
4

2 に答える 2

0

ただし、JavaMailの詳細はわかりません。

IMAPは、メッセージのMIME部分をダウンロードするためのプロトコルのメソッドを提供し、メッセージをサーバー上で分離して部分的にダウンロードできるようにします。

POP3の基本プロトコルは、メッセージ全体のダウンロードのみをサポートしています。オプションのTOP拡張機能を使用するとn、メッセージの最初の行をダウンロードできます。

JavaMailに、メッセージのダウンロードを(すべてをメモリ内ではなく)ディスクにストリーミングするための特定の拡張機能がある場合は、メモリ不足エラーを回避できるはずです。

于 2012-08-07T15:02:07.960 に答える
0

JavaMail 1.4.4以降では、POP3メッセージをディスク上のtmpファイルにキャッシュできるため、使用するメモリが少なくなります。設定するプロパティについては、com.sun.mail.pop3パッケージのjavadocsを参照してください。大きな添付ファイルを処理するためにgetContentの代わりにgetInputStreamを使用するなど、メールの内容を処理する方法に注意する必要があります。

于 2012-08-07T17:26:41.263 に答える