java getDisposition在带附件的电子邮件上返回null

时间:2013-07-07 23:20:28

标签: java javamail email-attachments

所以我正在为家庭作业分配一个邮件客户端,其中一个要求是处理传入的附件。我想要做的第一件事就是显示电子邮件是否有附件。我有一堆AWT列表,它们是From,Subject,Size,Date,Attachment的并排。

出于测试目的,如果处置返回null,我只需在attachmentList中放入一个x。如果它是内联的,它会放置一个i和for附件,它应该显示文件名。但是,即使在有附件并查看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);
                    }
                }
            }

你会注意到它打印出“处理是...”这是另一个测试代码,它总是打印null或INLINE。我正在查看的特定电子邮件大约是700k,包含2个附件。

1 个答案:

答案 0 :(得分:1)

查看邮件的原始MIME文本,并确保按预期设置Content-Disposition标头。

打开JavaMail session debugging并检查调试输出中的协议跟踪。

您是否正在使用IMAP阅读邮件?如果是,则IMAP服务器解析该消息并返回IMAP协议消息中的“处置”信息。 IMAP服务器可能无法正确解析消息,也可能无法正确返回处置信息。