怎么判断javamail邮件中的附件原来的文件类型而不是通过bodypart.getcontenttype
时间: 2024-09-26 13:07:53 浏览: 32
浅析JavaMail发送邮件后再通过JavaMail接收格式问题
在JavaMail中,获取邮件附件原始文件类型通常依赖于`Content-Disposition`头信息。`Content-Type`主要是描述了数据的MIME类型,而`Content-Disposition`包含了更详细的信息,包括文件名、内容位置以及是否是下载等,其中包含了一个用于表示文件类型的`filename*`字段。
以下是一个简单的示例,说明如何从邮件消息中解析附件的原始文件类型:
```java
import javax.mail.internet.MimeBodyPart;
import java.util.Properties;
// 获取邮件消息
MimeMessage message = ... // 从Session对象中获取
// 遍历邮件的attachments
for (MimeBodyPart part : message.getContent().getParts()) {
if (part instanceof MimeBodyPart) {
String dispositionHeader = part.getDisposition();
Properties headers = part.getAllHeaders();
// 查找"Content-Disposition"头
if (dispositionHeader != null && dispositionHeader.startsWith("attachment")) {
Header filenameHeader = headers.getHeader("Content-Disposition");
if (filenameHeader != null) {
String fileName = filenameHeader.getValue();
int semiColonIndex = fileName.indexOf(';');
if (semiColonIndex > 0) {
// 提取文件名后的类型,可能会有编码问题,需要处理
String mimeType = fileName.substring(semiColonIndex + 1).split("filename*=UTF-8''")[0];
System.out.println("Original file type: " + mimeType);
}
}
}
}
}
```
阅读全文