You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中读取解析.msg文件并写入Excel?遇依赖及格式问题

解决Java解析.msg文件并导出Excel的方案

一、修复Maven依赖冲突问题

使用Apache POI的poi-scratchpad模块处理.msg文件,确保所有POI相关依赖版本统一,避免类加载或方法缺失错误。在pom.xml中添加以下依赖:

<dependencies>
    <!-- .msg文件解析核心依赖 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-scratchpad</artifactId>
        <version>5.2.5</version>
    </dependency>
    <!-- Excel文件生成依赖 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.5</version>
    </dependency>
</dependencies>

二、解析.msg文件生成可读格式

通过POI的MAPIMessage类提取邮件核心字段,拼接为空格分隔的可读文本:

import org.apache.poi.hsmf.MAPIMessage;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

public class MsgParser {
    public static List<String> parseMsgFiles(String... filePaths) throws Exception {
        List<String> parsedContents = new ArrayList<>();
        for (String path : filePaths) {
            try (FileInputStream fis = new FileInputStream(path)) {
                MAPIMessage msg = new MAPIMessage(fis);
                // 提取核心字段并以空格分隔
                String content = String.join(" ",
                    "发件人:" + msg.getDisplayFrom(),
                    "收件人:" + msg.getDisplayTo(),
                    "主题:" + msg.getSubject(),
                    "正文:" + (msg.getTextBody() != null ? msg.getTextBody().trim() : "无")
                );
                parsedContents.add(content);
            }
        }
        return parsedContents;
    }
}

如需更多字段(如抄送人、发送时间),可调用MAPIMessage的getDisplayCc()、getMessageDate()等方法补充。

三、将解析内容写入Excel

使用POI的XSSFWorkbook创建Excel文件,将每条解析结果写入单独行:

import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.util.List;

public class ExcelExporter {
    public static void exportToExcel(List<String> contents, String outputPath) throws Exception {
        try (XSSFWorkbook workbook = new XSSFWorkbook();
             FileOutputStream fos = new FileOutputStream(outputPath)) {
            XSSFSheet sheet = workbook.createSheet("邮件解析结果");
            // 写入表头
            XSSFRow headerRow = sheet.createRow(0);
            headerRow.createCell(0).setCellValue解析内容");
            // 写入数据行
            for (int i = 0; i < contents.size(); i++) {
                XSSFRow row = sheet.createRow(i + 1);
                row.createCell(0).setCellValue(contents.get(i));
            }
            workbook.write(fos);
        }
    }
}

调用示例

public class Main {
    public static void main(String[] args) {
        try {
            List<String> parsedData = MsgParser.parseMsgFiles("C:/test1.msg", "C:/test2.msg");
            ExcelExporter.exportToExcel(parsedData, "C:/邮件解析结果.xlsx");
            System.out.println("Excel导出完成");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

内容的提问来源于stack exchange,提问作者Naganika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:30:20