我正在使用javamail自动执行某些电子邮件处理。
我设法获得与pop3服务器的连接并获取消息。其中一些包含附件。根据电子邮件标题,我能够“预测”我需要获取的附件的文件名。
但我无法得到它的内容:(
我有一个功能
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;
}
该功能非常有效(即:仅当部件是fileName描述的附件时才返回内容)。但是数组的回报太大了。
下载的附件长度为256个字节,函数返回352个字节的长内容。
我认为问题来自标题,但我无法确定。
您将如何继续获取内容?
谢谢。
答案 0 :(得分:0)
对于它的价值,javax.mail.Part.getSize()
的API文档说
请注意,大小可能不是内容大小的精确度量,可能会也可能不会考虑内容的任何传输编码。该尺寸适合在用户界面中显示,以便用户大致了解该部件的尺寸。
假设您知道内容的类型,您可以从Part.getContent()
获取内容并进行处理。 getContent()
返回一个Object,但如果您知道内容类型,则可以适当地将其强制转换(例如,转换为文本字符串)。
答案 1 :(得分:0)
我终于找到了解决方案。
正如eaj所说:part.getSize()返回零件对象的大小。不是附件本身的大小。
但是,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;
}