3

SO 私は宿題のメール クライアントを作成しています。要件の 1 つは、受信した添付ファイルを処理することです。最初にやりたいことは、メールに添付ファイルがあるかどうかを表示することです。From、Subject、Size、Date、Attachment が並んでいる AWT リストがたくさんあります。

テスト目的で、ディスポジションが null を返す場合は、attachmentList に x を入れます。インラインの場合は i を付け、添付ファイルの場合はファイル名を表示する必要があります。ただし、添付ファイルがあり、gmail webmail のヘッダーを見ると、コンテンツの性質が添付ファイル (すべて小文字) として表示される電子メールでも、電子メールの getDisposition は依然として null を返します。ATTACHMENT や添付ファイル、または null 以外の何かを返さない理由がわかりません。関連するコードは次のとおりです。

for (int i = 0; i < messages.length; i++) {

                Address[] froms = messages[i].getFrom();
                String email = froms == null ? null : ((InternetAddress) froms[0]).getAddress();
                fromList.add(email);
                subjectList.add(messages[i].getSubject());
                sizeList.add("" + messages[i].getSize());
                dateList.add(messages[i].getReceivedDate().toString());
                String disposition = messages[i].getDisposition();
                System.out.println("Disposition is " + disposition + ".");
                if (disposition == null) {
                    attachmentList.add("x");
                }
                else if ("INLINE".equalsIgnoreCase(disposition)) {
                    attachmentList.add("i");
                }
                else if ("ATTACHMENT".equalsIgnoreCase(disposition)) {
                    String fileName = messages[i].getFileName();
                    if (fileName != null) {
                        attachmentList.add("attachment " + fileName);
                    }
                }
            }

別のテスト コードである "the disposition is..." が出力され、常に null または INLINE が出力されることに気付くでしょう。私が見ている特定の電子メールは約 700k で、2 つの添付ファイルが含まれています。

4

1 に答える 1

1

メッセージの生の MIME テキストを見て、Content-Disposition ヘッダーが期待どおりに設定されていることを確認します。

JavaMail セッションのデバッグをオンにして、デバッグ出力でプロトコル トレースを調べます。

メッセージを読むのに IMAP を使用していますか? その場合、IMAP サーバーはメッセージを解析し、IMAP プロトコル メッセージで「処理」情報を返します。IMAP サーバーがメッセージを正しく解析していないか、配置情報を正しく返していない可能性があります。

于 2013-07-08T22:06:37.283 に答える