使用javamail获取附件内容
我正在使用javamail自动化一些电子邮件处理 我设法连接到pop3服务器并获取消息。其中一些包含附件。基于电子邮件标题,我能够“预测”我需要获取的附件的文件名 但我无法得到它的内容:( 我有一个函数使用javamail获取附件内容,java,jakarta-mail,Java,Jakarta Mail,我正在使用javamail自动化一些电子邮件处理 我设法连接到pop3服务器并获取消息。其中一些包含附件。基于电子邮件标题,我能够“预测”我需要获取的附件的文件名 但我无法得到它的内容:( 我有一个函数 public byte[] searchForContent(Part part,String fileName){ if(part.getFileName()!=null){ if(part.getFileName().equals(fileName)){
public byte[] searchForContent(Part part,String fileName){
if(part.getFileName()!=null){
if(part.getFileName().equals(fileName)){
byte[] content = new byte[part.getSize()];
part.getInputStream().read(content);
return content[]
}
}
return null;
}
该函数工作得很好(即:仅当部分是由文件名描述的附件时才返回内容)。但其返回的数组太大
下载的附件长256字节,函数返回352字节的内容
我认为问题来自标题,但我不能确定
您将如何继续只获取内容
谢谢。值得一提的是,
javax.mail.Part.getSize()的API文档
请注意,大小可能不是内容大小的精确度量,也可能不是内容的任何传输编码。该大小适合在用户界面中显示,以便用户大致了解该部分的大小
假设您知道内容的类型,您可能可以从Part.getContent()
获取它并进行处理。getContent()
返回一个对象,但是如果您知道内容类型,您可以适当地将其强制转换(例如,转换为文本字符串)。我终于找到了一个解决方案
正如eaj所说:part.getSize()返回part对象的大小,而不是附件本身的大小
但是,part.getInputStream()返回的InputStream仅包含附件的内容
因此,下面的代码确实给出了预期的结果:
public byte[] searchForContent(Part part,String fileName){
if(part.getFileName()!=null){
if(part.getFileName().equals(fileName)){
InputStream stream=part.getInputStream();
byte[] buffer = new byte[512];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int bytesRead;
while ((bytesRead = stream.read(buffer) != -1)
{
baos.write(buffer, 0, bytesRead);
}
return baos.toByteArray();
}
}
return null;
}
太大是什么意思?它会创建指定的文件吗?如果是,那么它怎么会太大?如果我在桌面上下载附件并检查大小,我得到256字节。但是对于同一个附件,当我运行此代码时,返回的数组长度为352字节。