3

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

出于测试目的,如果处置返回 null,我只需在附件列表中放置一个 x。如果它是内联的,它会放置一个 i 并且对于附件它应该显示文件名。但是,即使在有附件的电子邮件上查看 gmail webmail 中的标头(将内容处置显示为附件(全部小写)),电子邮件的 getDisposition 仍然返回 null。我不明白为什么它不返回附件或附件或除 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 个附件。

4

1 回答 1

1

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

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

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

于 2013-07-08T22:06:37.283 回答