@TOC

由outlook导出的邮件后缀.msg 文件读取,获取邮件内容提取有效数据

引入必要依赖

 <dependency><groupId>org.simplejavamail</groupId><artifactId>outlook-message-parser</artifactId><version>1.7.7</version></dependency>

实现代码

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64;
import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Collectors;import org.apache.tomcat.util.http.fileupload.FileUtils;
import org.hibernate.validator.constraints.Email;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.reflections.util.Utils;
import org.simplejavamail.outlookmessageparser.OutlookMessageParser;
import org.simplejavamail.outlookmessageparser.model.OutlookFileAttachment;
import org.simplejavamail.outlookmessageparser.model.OutlookMessage;
import org.simplejavamail.outlookmessageparser.model.OutlookMsgAttachment;
import org.simplejavamail.outlookmessageparser.model.OutlookRecipient;
import org.springframework.util.StringUtils;import cn.spj.spr_parent.TestRead.EmailPreviewVo;public class TestRead {public static void main(String[] args) throws IOException {msgParseToPreview(new File("C:\\Users\\os-lusd\\Desktop\\邮件\\内部研究,严禁外传.msg"));}/*** 解析MSG邮件,可以将邮件以HTML展示。* @param file MSG格式邮件的全路径* @return vo * @throws IOException IO异常*/public static  void msgParseToPreview(File file) throws IOException {OutlookMessageParser msgp = new OutlookMessageParser();OutlookMessage msg = msgp.parseMsg(file.getAbsolutePath());List<FileVo> attachList = new ArrayList<>();for(int i=0; i < msg.getOutlookAttachments().size(); i++) {/** TODO 注意:OutlookAttachment 是个接口有两个实现类,*  1)、OutlookFileAttachment  存在真实文件字节数据集*  2)、OutlookMsgAttachment 为.msg格式文件再次被递归解析*      目前没有好办法去获取到邮件附件为.msg格式真实文件,*/// .msg格式附件暂时忽略if (msg.getOutlookAttachments().get(i) instanceof OutlookMsgAttachment) {continue;}}// 内容 要处理下不然他会带有微软雅黑的样式,与原邮件样式不符/***org.jsoup.nodes.Document*org.jsoup.Jsoup*/Document doc = Jsoup.parse(msg.getConvertedBodyHTML());List<FileVo> newAttachList = new ArrayList<>();newAttachList.addAll(attachList);// 对邮件中图片进行处理String context = null;// 内容Elements bodyList = doc.select("body");if (bodyList.size() > 0) {Element bodyEle = bodyList.first();if (bodyEle.html().length() > 0) {context=bodyEle.html();}}// 消息头信息System.out.println( "EmailPreviewVo [ from=" + msg.getFromEmail() + ", cc=" + getMailUser(msg, msg.getDisplayCc().trim()) + ","+ " to=" + getMailUser(msg, msg.getDisplayTo().trim()) + ","+ " subject=" + msg.getSubject() + ", sentDate=" + msg.getClientSubmitTime()+ ", content=" + context.substring(0,100) + "]");}/*** MSG 以名称获取真实收发抄邮件地址* @param msg OutlookMessage * @param parm 人员成名* @return 展示名称*/private static String getMailUser(OutlookMessage msg, String parm) {List<String> parmList = null;OutlookRecipient recipient = null;StringBuffer sb = new StringBuffer();if(StringUtils.hasText(parm)){if (parm.contains(";")) {parmList = Arrays.asList(parm.split(";")).stream().map(s -> s.trim()).collect(Collectors.toList());for (int i = 0; i < parmList.size(); i++) {String value = parmList.get(i);if (msg != null && msg.getRecipients().size() > 0) {recipient = msg.getRecipients().stream().filter(e -> e.getName().equals(value)).collect(Collectors.toList()).get(0);sb.append(recipient.getName());sb.append(" <" + recipient.getAddress() + ">");if (i != (parmList.size() - 1)) {sb.append(",");}}}} else {recipient = msg.getRecipients().stream().filter(e -> e.getName().equals(parm)).collect(Collectors.toList()).get(0);sb.append(recipient.getName());sb.append(" <" + recipient.getAddress() + ">");}}return sb.toString();}class EmailPreviewVo {public EmailPreviewVo() {super();}private Long id;private String from;private String cc;private String to;private String subject;private String sentDate;private String content;private List<String> attachments;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getFrom() {return from;}public void setFrom(String from) {this.from = from;}public String getCc() {return cc;}public void setCc(String cc) {this.cc = cc;}public String getTo() {return to;}public void setTo(String to) {this.to = to;}public String getSubject() {return subject;}public void setSubject(String subject) {this.subject = subject;}public String getSentDate() {return sentDate;}public void setSentDate(String sentDate) {this.sentDate = sentDate;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public List<String> getAttachments() {return attachments;}public void setAttachments(List<String> attachments) {this.attachments = attachments;}@Overridepublic String toString() {return "EmailPreviewVo [id=" + id + ", from=" + from + ", cc=" + cc + ", to=" + to + ", subject=" + subject + ", sentDate=" + sentDate+ ", content=" + content + ", attachments=" + attachments + "]";}}public class FileVo {}}

outlook导出邮件(.msg)读取和解析相关推荐

  1. java 对Outlook保存的.Msg格式文件解析

    文件控件上传.msg格式文件,达到预览效果 前端控件代码就介绍了,重点是解析文件.我是用了outlook-message-parser来解析文件. 代码展示 首先是maven依赖 <depend ...

  2. outlook 导出邮件服务器通讯录,OUTLOOK 2010备份联系人日历邮件导入和导出基础教程...

    使用安装OFFICE OUTLOOK 2010半年多了,因办公原因需要备份outlook联系人日历邮件等数据.首先就是备份OUTLOOK中的邮件和通讯录,照旧我去找"导入和导出"来 ...

  3. spring boot 中使用 POP3协议读取并解析邮件

    spring boot 中使用 POP3协议读取并解析邮件 1.邮箱授权 QQ邮箱授权,打开 "设置" 切换到 "账户" 找到下图中设置,开启 "PO ...

  4. 更换电脑时,如何将原OutLook中邮件全部导出呢

    OutLook导出功能,帮助大家保存完整邮件信息. 工具/原料 OutLook 步骤/方法 1 选择"文件"选项卡. 2 选择"高级"选项. 3 选择" ...

  5. outlook存档邮件_如何在Outlook 2013中存档电子邮件

    outlook存档邮件 We've always been told that backing up our data is a good idea. Well, that same concept ...

  6. python读取邮箱邮件_Python读取邮箱邮件

    from email.parser importParserfrom email.header importdecode_headerfrom email.utils importparseaddri ...

  7. 从Foxmail向Thunderbird(TB)导出邮件

    Thunderbird(TB)不支持从Foxmail直接导入邮件,所以要借助Outlook. 先在Foxmail中选中一批邮件,然后选文件菜单中的导出命令. Foxmail导出的是.eml文件,一个邮 ...

  8. (纯前台)读取、解析并展示xls/xlsx

    写一个当时让我弄了好几天的东西吧.. 纯前台读取.解析Excel 表格,并展示在页面上的一个插件.(需要自行修改代码). 地址是: https://github.com/SheetJS/js-xlsx ...

  9. STM32F103通过模拟IIC读取LIS3DH 解析数据获取加速度和角度

    STM32F03通过模拟IIC读取LIS3DH 解析数据获取加速度和角度. 串口1输出电脑串口助手,直接用即可,代码规范,好移植 STM32F03通过模拟IIC读取LIS3DH 解析数据获取加速度和角 ...

最新文章

  1. 【Python】深度学习中将数据按比例随机分成随机 训练集 和 测试集的python脚本
  2. HUST 1586 数字排列
  3. Postman收费太贵了,我决定用Postwoman...
  4. reg类型变量综合电路_verilog中reg和wire类型的区别
  5. java正则表达式 过滤特殊字符的正则表达式
  6. “===” 也有不靠谱的时候
  7. 不同表主键能相等吗_视频 |【搞机实验室】测血氧有啥,你见过能“开车”的表吗?...
  8. Hdu - 1002 - A + B Problem II
  9. Essential Booklist of .Net Framework
  10. 181230每日一句
  11. [2018.07.31 T2] 第二题
  12. 校园网接无线路由器多账号登录
  13. 坚果种类和营养价值排名
  14. 吉林公主岭玉米丰收将成定局
  15. “智慧机场3.0”样板工程 北京大兴机场物联网系统有多牛?
  16. 40岁左右适合干个什么样的小生意?
  17. 禁忌搜索算法TS(学习笔记_04)
  18. 金蝶kis记账王怎么反审核凭证
  19. ubuntu 18.04 Linux 安装OpenCV 教程
  20. 华清远见荣获“华为云精英服务商”资质,助推“华为开发者创新中心”项目落地高校

热门文章

  1. vnpy量化回测怎么做?一文带你了解
  2. 怎么使用biopython_关于python:使用Biopython的翻译功能后,如何跟踪核苷酸序列中起始密码子(ATG)的位置?...
  3. 思维模型 瓦伦达效应
  4. 11款最好的JavaScript源代码编辑器
  5. 流落在帝都的 80 后北漂们的未来在哪儿?
  6. java实现html页面转pdf解决方案_[Java教程]纯js实现html转pdf
  7. Win7开启wifi热点
  8. centos 关于“Error: Failed to download metadata for repo ‘appstream‘” 问题
  9. 海康摄像头音频编码获取
  10. SpringBoot整合email