所以我正在为家庭作业分配一个邮件客户端,其中一个要求是处理传入的附件。我想要做的第一件事就是显示电子邮件是否有附件。我有一堆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个附件。
答案 0 :(得分:1)
查看邮件的原始MIME文本,并确保按预期设置Content-Disposition标头。
打开JavaMail session debugging并检查调试输出中的协议跟踪。
您是否正在使用IMAP阅读邮件?如果是,则IMAP服务器解析该消息并返回IMAP协议消息中的“处置”信息。 IMAP服务器可能无法正确解析消息,也可能无法正确返回处置信息。