java—javamail附件是inputstream的示例吗?

zpqajqem  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(344)

我想找一个 java 自动处理的程序 xml 作为电子邮件附件发送到应用程序的内容。我一直在尝试用不同的方法来查询电子邮件的组件以查找 xml 唯一可靠的方法就是 bodypart s。如何才能最好地确定身体部位是否是xml文件,然后将该xml文件自动转换为输入流?我想转换任何 xml 依附于 inputstream 然后做进一步的处理 inputstream .
以下是我的想象:

for(int y=1;y<=msg_count;y++){
    Message msg = inbox.getMessage(y);
    if(msg.getContent() instanceof Multipart){
        Multipart mp = (Multipart) msg.getContent();
        for(int a=0;a<mp.getCount();a++){
            BodyPart bp = mp.getBodyPart(a);
            if(bp.getFileName()!=null){
                if(bp.getFileName().endsWith(".xml")){
                    if(bp.getContent() instanceof com.sun.mail.imap.IMAPInputStream){
                        InputStream myis = (InputStream)bp.getContent();
                        Blob blob = null;
                        byte[] content = IOUtils.toByteArray(myis);
                        try {blob = new SerialBlob(content);} 
                        catch (SerialException e) {e.printStackTrace();}
                        catch (SQLException e) {e.printStackTrace();}
                    }
                }
            }
        }
    }
}

问题是,eclipse警告上面的代码引用了一个阻碍编译的错误 com.sun.mail.imap.IMAPInputStream ,即使system.out.println(bp.getcontent())返回 com.sun.mail.imap.IMAPInputStream 对于上面代码中的xml附件。

dauxcl2d

dauxcl2d1#

你在检查它是否是 com.sun.mail.imap.IMAPInputStream ,如果是的话,你就投给 java.io.InputStream . 所以,事实上,你应该测试的只是它是否是 java.io.InputStream . 这是演员们成功所需要的。
不管它是一个 com.sun.mail.imap.IMAPInputStream 或者不重要,这是一个实现细节。

bvuwiixz

bvuwiixz2#

你的代码中有太多的假设,所以有必要问你到底想做什么。。。
许多不同类型的附件都可以是xml格式,您真的要处理所有这些附件吗?说某个东西是“xml”只比说它是“ascii”稍微有用一点。您需要什么样的xml数据?您想用它做什么?
附件可能有名称,也可能没有名称,xml格式的附件可能有文件名以“.xml”结尾,也可能没有。
谁在发送您要处理的消息?他们正在被发送给我的另一个程序,你知道,它只发送一个.xml文件名的xml文件?或者你正在试图处理任何邮件程序在任何带有任何附件的邮箱中发送的任意邮件?
了解您真正想做的事情将有助于我们推荐最佳解决方案。

q9yhzks0

q9yhzks03#

当上下文中没有定义类时,可以使用getclass().getname()和字符串来与预期结果进行比较,而不是使用instanceof。

相关问题