使用javamail获取附件内容

使用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)){

我正在使用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;
}
该函数工作得很好(即:仅当部分是由文件名描述的附件时才返回内容)。但其返回的数组太大

下载的附件长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字节。