当前位置: 首页 > 知识库问答 >
问题:

JavaMail MimeBodyPart。SaveFile提供损坏的文件

莘光华
2023-03-14

我正在使用JavaMail库解析电子邮件mime消息。我正在尝试提取附件并将其保存到本地磁盘,但保存的文件无效,并且大小与原始文件不同。只有*。txt文件保存正常,但*。PDF或*。xlsx不是。你能帮我修一下密码吗?

我的代码是:

private static void Test3() {
        String email_string = File_Reader.Read_File_To_String("D:\\8.txt");
        MimeMessage mm = Email_Parser.Get_MIME_Message_From_Email_String(email_string);

        Email_Parser.Save_Email_Attachments_To_Folder(mm,"D:\\TEST");
    }

public static String Read_File_To_String(String file_path) {
    byte[] encoded = new byte[0];

    try {
        encoded = Files.readAllBytes(Paths.get(file_path));
    } catch (IOException exception) {
        Print_To_Console(exception.getMessage(), true,false);
    }

    return new String(encoded, m_encoding);
}

public static MimeMessage Get_MIME_Message_From_Email_String(String email_string) {
    MimeMessage mm = null;

    try {
        Session s = Session.getDefaultInstance(new Properties());
        InputStream is = new ByteArrayInputStream(email_string.getBytes());
        mm = new MimeMessage(s, is);
    } catch (MessagingException exception) {
        Print_To_Console(exception.getMessage(), true, false);
    }
    return mm;
}

public static void Save_Email_Attachments_To_Folder(MimeMessage mm, String output_folder_path) {
        ArrayList<Pair<String, InputStream>> attachments_InputStreams = Get_Attachments_InputStream_From_MimeMessage(mm);
        String attachment_filename;
        String attachment_filename_save_path;
        InputStream attachment_InputStream;
        MimeBodyPart mbp;

        for (Pair<String, InputStream> attachments_InputStream : attachments_InputStreams) {
            attachment_filename = attachments_InputStream.getKey();
            attachment_filename = Get_Encoded_String(attachment_filename);
            attachment_filename_save_path = String.format("%s\\%s", output_folder_path, attachment_filename);
            attachment_InputStream = attachments_InputStream.getValue();

            try {
                mbp = new MimeBodyPart(attachment_InputStream);
                mbp.saveFile(attachment_filename_save_path);
            } catch (MessagingException | IOException exception) {
                Print_To_Console(exception.getMessage(), true, false);
            }
        }
    }

共有1个答案

白星腾
2023-03-14

你在Save_Email_Attachments_To_文件夹中做了一些非常奇怪的事情。(更不用说使用驼峰大小写和下划线的奇怪命名约定了。:-)我不知道您正在收集的InputStreams是什么,但基于它们构建新的MimeBodyPart,然后使用新的MimeBodyPart将附件保存到文件中几乎肯定不是您想要做的事情。

从MimeMessage获取附件输入流到底在做什么?为什么要迭代消息以收集一组输入流,然后迭代输入流以保存它们?为什么不在邮件上迭代以查找附件,并在使用MimeBodyPart查找附件时保存它们呢。保存文件方法?你看过msgshow吗。java示例程序?

 类似资料:
  • 问题内容: 我使用Eclipse在Windows 7中创建了一个jar文件。当我尝试打开jar文件时,它说jar文件无效或损坏。谁能建议我为什么jar文件无效? 问题答案: 当您在Windows资源管理器中双击一个JAR文件时,会发生这种情况,但是JAR本身实际上不是 可执行的 JAR。真正的可执行JAR至少应具有带有方法的类,并在中引用它。 在Eclispe中,您需要将项目导出为 Runnabl

  • 我正在使用apache poi,我创建了一个HSSF工作簿,并尝试打开一个xlsx文件。但当我用excel打开时,它显示文件已损坏。这是我的密码。

  • 我正在尝试创建一个zip文件,以便能够通过http发送多个文件。 我的问题是,生成的Zip文件在发送之前和之后都“损坏”。问题是我无法找到我做错了什么,因为我在控制台中没有收到任何错误。 那么,有人有一个想法文件我生成的zip文件损坏? 这是我的代码: 谢谢你的帮助!

  • 我需要一个快速的Java方法来检查JPEG文件是否有效,或者它是否是一个被截断/损坏的图像。 我试着用几种方法: > 使用javax.imageio库 我正在寻找一个Java替代UNIX程序jpeginfo,它大约快10倍(在我的PC上,大约10个图像/秒)。

  • 我编写的下载文件的方法总是产生损坏的文件。 我通过adb访问这些文件,将它们传输到我的sccard,在那里我看到它们似乎有合适的大小,但没有根据例如Linux命令的类型。 你知道丢失了什么以及如何修复它吗? 谢谢。 代码的简单版本(但错误相同) 日志:< code > file . length:2485394 | content length:1399242 问题是,我从我的API单例中获得了,