最近我在通过oracle-javamail从我的电子邮件下载CSV时遇到了一个问题。我发现第一个工作正常(来自大型机服务器),但是第二个csv附件似乎是“应用程序/vnd.ms-excel”,当它显然是一个. csv文件时,就像另一个下载完全正常的文件一样。
我在这两个问题上使用了相同的代码,但找不到有关此问题的任何信息。
如果我把那封电子邮件发给自己,我可以神奇地下载附件而没有任何问题。任何帮助都将不胜感激。一旦我开始工作,另一个日常任务就会自动化!
if(content instanceof java.lang.String){
//emailBody = (String)content;
} else if(content instanceof Multipart){
System.out.println("is Multipart");
Multipart mp = (Multipart)content;
for (int j=0; j < mp.getCount(); j++) {
Part part = mp.getBodyPart(j);
String disposition = part.getDisposition();
if (disposition == null) {
// Check if plain
MimeBodyPart mbp = (MimeBodyPart)part;
if (mbp.isMimeType("text/plain")) {
//emailBody += (String)mbp.getContent();
} else {
// Special non-attachment cases here of
// image/gif, text/html, ...
String fileName = decodeName(part.getFileName());
File savedir = new File(path+"\\"+fileName);
saveFile(savedir, part);
}
} else if ((disposition != null) &&
(disposition.equals(Part.ATTACHMENT) || disposition.equals(Part.INLINE))){
// Check if plain
MimeBodyPart mbp = (MimeBodyPart)part;
if (mbp.isMimeType("text/plain")) {
System.out.println("has disp of plain");
//emailBody += (String)mbp.getContent();
} else {
System.out.println("has disp of else");
String fileName = decodeName(part.getFileName());
File savedir = new File(path+"\\"+fileName);
saveFile(savedir, part);
}
}
}
}
else{
System.out.println(message.getContentType());
}
虽然java似乎知道它接收的电子邮件类型,但事实证明它不知道。因为这不是标准类型,所以它会将其作为输入流返回。我可以用下面的代码查看文件的内容。
还要注意,这是作为应用程序/vnd出现的唯一原因。ms excel文件类型是因为电子邮件正文为空。
InputStream emailIn = (InputStream) message.getContent();
Scanner s = null;
try{
s = new Scanner(emailIn).useDelimiter("\\A");
while(s.hasNext())
System.out.println(s.next());
}
finally{
s.close();
}