从 .eml 文件获取文本的最佳方法是什么?

2024-03-10

我尝试从本地驱动器上的几个 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邮件 https://github.com/bbottema/simple-java-mail(Github)可以读取 .eml 文件 http://www.simplejavamail.org/features.html#section-converting并使内容变得非常容易理解。如果您也发现类似循环错误的情况(不太可能),我将很乐意为您提供帮助(我积极维护 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 加密电子邮件(如果您有解密电子邮件所需的证书)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 .eml 文件获取文本的最佳方法是什么? 的相关文章

  • 用Java将图像添加到数据库

    我正在尝试将图像添加到 mysql 数据库中的 BLOB 字段 图像大小将小于 100kb 但是我遇到了问题 想知道将这些数据添加到数据库的更好方法是什么 com mysql jdbc MysqlDataTruncation 数据截断 第
  • Java 7 watchservice获取文件更改偏移量

    我刚刚尝试使用 Java 7 WatchService 来监视文件的更改 这是我敲出的一些代码 WatchService watcher FileSystems getDefault newWatchService Path path Pa
  • 在tomcat中显示Spring-security的SQL错误

    我使用 spring security 框架创建了一个 Web 应用程序 我设置了一个数据库来存储用户及其角色 但 tomcat 给出以下错误 17 sep 2010 11 56 14 org springframework beans f
  • Java Swing透明JPanel问题

    我有一个 JLayeredPane 其中添加了 3 个 JPanel 我将 JPanel 设为透明 未设置背景并 setOpaque false 我在 JPanel 上绘制线条 只有最后添加的 JPanel 上的线条可见 其他 JPanel
  • 使用 Java 的 OpenId 提供者/服务器

    我正在尝试使用 OpenId 服务增强现有的 Java Web 应用程序 以便登录用户可以使用我的 Web 应用程序作为 OpenId 提供程序登录另一个启用 OpenId 的应用程序 My first attempt was to use
  • iText7:如何获取段落的实际宽度

    在添加到文档之前 我需要知道段落的宽度 以磅为单位 我在这里搜索并找到了 Alexey 关于段落高度的答案 所以我用宽度做了它 但它不起作用 无论段落有多长 始终返回矩形的宽度 我尝试了这段代码 private float getRealP
  • 如何找出已使用的 JAR?

    在更大的项目中 我们可能会使用大量的 JAR 如何找出项目 而不是整个项目 中的某个模块 包正在使用哪些 JAR 有什么工具 技术等吗 较大的项目通常使用类似的构建工具maven http maven apache org or ant h
  • Encog - 如何加载神经网络的训练数据

    The NeuralDataSet我在实际中看到的对象除了 XOR 之外什么都没有 它只是两个小数据数组 我无法从文档中找出任何内容MLDataSet 似乎所有内容都必须立即加载 但是 我想循环遍历训练数据 直到到达 EOF 然后将其算作
  • Java SWT 用户输入验证

    在 SWT 中进行用户输入验证时 Java 约定是什么 我读到有 FieldEditors 它们是非常方便的字段 但遗憾的是仅适用于首选项和对话框 我还了解到有一个 IValidator 接口 但它经常与数据绑定一起使用 就我而言 我的大多
  • Android 3.1 USB 主机 - BroadcastReceiver 未收到 USB_DEVICE_ATTACHED

    我经历过USB 主机的描述和示例位于developer android com http developer android com guide topics usb host html检测连接和分离的 USB 设备 如果我在清单文件中使用
  • kafka消费端Offsets的一致性

    我有复制因子为 3 的卡夫卡主题min insync replicas 2 一个向该主题发送 X 条消息的生产者acks all 一段时间后 1 分钟内 在所有消息发送到主题后 将使用 java kafka 客户端为此主题创建新的消费者 使
  • Spring-data-cassandra:创建名称为“sessionFactory”的 bean 时出错,并且无法解析对 bean“cassandraTemplate”的引用

    我有一个 springboot 应用程序 在其中连接到 cassandra DB 我的 pom xml parent gt
  • 如果在构造函数中使用 super 调用重写方法会发生什么

    有两个班级Super1 and Sub1 超1级 public class Super1 Super1 this printThree public void printThree System out println Print Thre
  • java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException

    我想将 apache cli 添加到我的应用程序中 但我有问题 当我尝试运行它时显示这些错误 Error A JNI error has occurred please check your installation and try aga
  • 表达式的类型必须是数组类型,但它解析为浮点数

    当我编写 Java 代码时 我遇到了困难 我觉得我不知何故把这个概念弄乱了 就像我不确定这一点 void setScore float sco sco score public void setScore float sco int id
  • SWIG C 函数指针和 JAVA

    我有一些 C 代码 其中一个方法有一个函数指针作为参数 我正在尝试在我的 Android 应用程序中使用 C 代码 我决定使用 SWIG 来完成生成我需要的 java 文件的所有工作 一切都适用于常规函数 没有函数指针作为参数的函数 但我不
  • 如何在非Spring的构造型类中使用@Autowired

    我想在此类中使用该存储库 但是当我放置像 Component 这样的构造型时 我从 IDE 收到错误 无法自动装配 未找到 身份验证 类型的 bean public class CustomMethodSecurityExpressionR
  • java.lang.OutOfMemoryError:尝试将 Java 对象转换为 Json 字符串时的 Java 堆空间

    我尝试将 csv 文件转换为 200K 对象的 Json 文件 其中对象代表 csv 中的 1 行 我在 32 位上安装了 Java 并且项目配置 VM 参数 Xmx1024m 但是我得到 Exception in thread main
  • JAXB 枚举字段未序列化

    我有以下课程 package dictionary import java io Serializable import java util Objects import javax xml bind annotation XmlEleme
  • JAAS keytab 配置的相对路径

    我有一个系统 其中 NET 客户端使用 Kerberos 针对 Java 服务器进行身份验证 一切正常 但我正在尝试改进服务器配置 目前一个keytab根目录中需要文件C 因为我的jaas配置文件看起来像这样 Server com sun

随机推荐

  • 使用 REST Api,如何在我的类型请求模型中包含“任何类型的 json”?

    我正在使用 NET Framework 和 ASP NET Core 创建 REST Web Api 此 Web API 有一个调用 用于获取请求模型以保存数据 以及一些调用 用于稍后检索数据 大多数数据是我在后端需要的结构化信息 它们被保
  • Java 可重入锁和条件 |生产者完成工作,消费者陷入困境

    一般信息 三个读取器线程从文件中随机读取块 每个块都有一个 ID 然后写入普通的 ArrayList 一旦具有所需 ID 的块被添加到列表中 写入线程就会写入输出文件 因此 我编写了一个 BlockingChunkList 它应该同步 ad
  • 为什么 Firefox 拒绝 ttf 字体

    我有来自网络的 ttf 字体 它们在 ftp 客户端 目录中列为 Windows ttf 字体 我在 Mac OSX 平台上的 Firefox 上使用嵌入字体 但收到以下 Web 控制台错误 17 59 49 201 downloadabl
  • Angularjs 和 jquery 无法以我常规的简单形式工作

    我正在学习 Angularjs 并创建了简单的表单 实际上我是 PHP 开发人员 所以我更喜欢使用 php 作为服务器端脚本语言 我无法将数据提交到服务器 我尝试了很多方法 但是如果我尝试使用标准方法 Angularjs 不起作用 那么这些
  • 如何使用 jQuery 进行重定向? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我使用 HTML 表单提交给 jQuery 验证 然后通过 ajax 将信息发送到 PHP 处理页面 一切都 100 正常工作 除
  • Xcode 7.3 不断在空闲状态下构建

    I noticed that Xcode 7 3 always keep building even in idle time This loads CPU much so sometimes it stops responding Doe
  • 异步构造函数

    我怎样才能最好地处理如下情况 我有一个需要一段时间才能完成的构造函数 var Element function Element name this name name this nucleus this load nucleus name
  • 不在范围内:数据构造函数?

    我是哈斯克尔的新手 我遇到这个问题 Assignment12 hs 5 12 不在范围内 数据构造函数 Suit Assignment12 hs 5 18 不在范围内 数据构造函数 Rank Assignment12 hs 6 11 不在范
  • Java简单计算器

    我用Java编写了这个计算器程序 仅当同时计算两个数字时 此方法才有效 这意味着要获得 1 2 3 的总和 您必须这样做 按 1 按 按 2 按 按 按 3 按 计算结果为 6 但我想对此进行编程 以便我可以通过以下方式获得答案 按 1 按
  • 在 Pi 上通过 python 执行 bluetoothctl 命令

    每次我想在我的 pi 上运行 python 脚本之前 我都会在终端上运行一系列 Bluetoothctl 命令 我想从 pi 自动连接到 BLE 设备 无需任何配对确认或用户交互 以下是每次在运行另一个 python 脚本之前重新启动 pi
  • 事务性与非事务性 msmq

    我不断看到文档 http msdn microsoft com en us library ms702030 VS 85 aspx表示不可能发送到事务范围之外的远程事务 msmq 队列 我发现这很难相信 因为我think我已经这样做了好几个
  • 无法将新元数据附加到捕获的图像

    我正在尝试将我自己的一些字段附加到我捕获的图像中 我似乎能够更改现有的 EXIF 条目 但无法添加新条目 无论是在 EXIF 字典中还是作为单独的字典添加到图像中 当我进行添加时 我可以将它们视为图像数据的一部分 但它们永远不会保存到图像文
  • Acumatica 过滤 PXSelector 具有快速搜索功能

    我有一个自定义 dac 和 pxselector 如下所示 With quick search red bordered search I want to filter with every properties For example w
  • main 的 ret 指令去哪里了

    我在 Programming from ground up 一书中了解了汇编 x86 如何在全球范围内工作 在本书中 每个程序都以退出中断调用结束 然而 在C编译的程序中 我发现程序以ret结尾 这假设有一个地址要弹出 这将导致程序结束 所
  • TYPO3 Extbase如何清空ObjectStorage

    我想在更新对象时 清空 ObjectStorage 它是 TYPO3 4 6 带有 Extbase 扩展 允许您在前端显示 添加 编辑 删除数据集 乍一看一切看起来都不错 我有一个字段引用另一张表 TCA partner gt array
  • Fortran 77 续行[重复]

    这个问题在这里已经有答案了 所以我必须用 fortran77 和 f 文件扩展名编写这个程序 并且我不想使用选项来编译它 我想修复该错误 但由于某种原因 我尝试过的所有操作仍然给我这个错误 我已经包含了代码和错误终端输出 程序 p1 隐式无
  • Android getActivity() 在片段内总是返回 null

    我遇到了一个奇怪的问题 getActivity 方法always在片段内返回 null 我在 onAttach 和 onCreateView 完成运行后调用它 该片段位于包含片段堆栈的 FragmentActivity 内 我向其中添加片段
  • 上传的图片仅在刷新页面后可用

    当我上传图片时 文件保存成功 路径设置成功 但表单提交后上传的图像并没有立即显示 仅当我重新加载页面时 才会显示上传的图像 我正在保存上传的文件 如下所示 InputStream is try File file new File C Do
  • 未找到 CodeIgniter 对象,仅索引函数有效

    我是 CodeIgniter 的新手 一切都很顺利 直到我发现我只能打电话给index 功能 我已经设置了config php autoload php and routes php正如预期的那样 在 config php 上 config
  • 从 .eml 文件获取文本的最佳方法是什么?

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