【问题标题】:What is the best way to get text from .eml file?从 .eml 文件中获取文本的最佳方法是什么?
【发布时间】:2021-01-14 16:42:39
【问题描述】:

我尝试从本地驱动器上的几个 eml 文件中获取、获取主题和消息正文。现在我尝试使用 Apache Commons Email,但有时它会循环而没有错误。这是我的代码,它应该从 eml 获取文本并将其保存到 txt:

            MimeMessage mimeMessage = MimeMessageUtils.createMimeMessage(null, file);
            MimeMessageParser parser = new MimeMessageParser(mimeMessage);

            if (parser.parse().hasPlainContent()) {
                //Trying to get text of the message
                try (FileWriter writer = new FileWriter(txtName)) {
                    writeHeaders(writer, parser);
                    writer.write(parser.parse().getPlainContent());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else if (parser.parse().hasHtmlContent()) {
                try (FileWriter writer = new FileWriter(txtName)) {
                    writeHeaders(writer, parser);
                    String text = Jsoup.parse(parser.parse().getHtmlContent()).text();
                    writer.write(text);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

这里还有 writeHeaders 方法:

    private void writeHeaders(FileWriter writer, MimeMessageParser parser) throws Exception {
        writer.write("From :" + parser.getFrom() + "\n");
        writer.write("To:" + parser.getTo() + "\n");
        writer.write("Subject:" + parser.getSubject() + "\n");
        writer.write("Message:" + "\n" + "\n");
    }

这是获取附件的方法:

          if (parser.parse().hasAttachments()) {
                //Getting and saving attachments from eml
                List<DataSource> attachments = parser.parse().getAttachmentList();
                for (DataSource attachment : attachments) {
                    if (attachment.getName() != null && !attachment.getName().isEmpty()) {
                        try (InputStream is = attachment.getInputStream()) {
                            File save = new File(saveDir + File.separator + attachment.getName());
                            FileOutputStream fos = new FileOutputStream(save);
                            byte[] buf = new byte[4096];
                            int bytesRead;
                            while ((bytesRead = is.read(buf)) != -1) {
                                fos.write(buf, 0, bytesRead);
                            }
                            fos.close();
                            if (save.getName().endsWith("eml")) {
                                parseEml(save, count);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }

那么,也许有更简单的方法来获取文本和附件?

【问题讨论】:

    标签: java email text eml apache-commons-email


    【解决方案1】:

    是的,要容易得多。 Simple Java Mail (Github) 可以 read .eml files 使内容非常易于访问。如果你也发现类似循环错误的东西(不太可能),我很乐意在那里为你提供帮助(我积极维护 Simple Java Mail):

    Email email = EmailConverter.emlToEmail(emlFile);
    
    email.getFromRecipient();
    email.getSubject();
    email.getPlainText();
    email.getHTMLText();
    email.getAttachments();
    email.getEmbeddedImages();
    email.getHeaders();
    // etc. etc.
    

    还支持 S/MIME 加密电子邮件(如果您拥有解密电子邮件所需的证书)。

    【讨论】:

    • 是的,谢谢,已经找到并使用了,抱歉这么久没有回复。循环错误是因为javaFX界面错误,尤其是进度条。所以我的代码也可以按我的需要工作。
    猜你喜欢
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2010-09-09
    • 2018-03-24
    • 2019-09-18
    • 1970-01-01
    • 2011-09-28
    • 2013-01-01
    相关资源
    最近更新 更多