当前位置: 首页 > news >正文

解析邮件文本内容; Mime文本解析; MimeStreamParser; multipart解析

原始文本

------=_Part_46705_715015081.1699589700255
Content-Type: text/html;charset=UTF-8
Content-Transfer-Encoding: base64PGh0bWw+CiAgICA8aGVhZD4KICAgICAgICA8bWV0YSBodHRwLW
VxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRt
bDsgY2hhcnNldD1VVEYtOCI+CiAgICAgICAgPHRpdGxlPkpTUC
BQYWdlPC90aXRsZT4KICAgIDwvaGVhZD4KICAgIDxib2R5Pgog
ICAgICAgIDxoMT5IZWxsbyBXb3JsZCE8L2gxPgogICAgPC9ib2
R5Pgo8L2h0bWw+
------=_Part_46705_715015081.1699589700255--

Maven

 <dependency><groupId>org.apache.james</groupId><artifactId>apache-mime4j-core</artifactId><version>0.8.9</version></dependency>

解析方法

String data = "------=_Part_46705_715015081.1699589700255\n" +"Content-Type: text/html;charset=UTF-8\n" +"Content-Transfer-Encoding: base64\n" +"\n" +"PGh0bWw+CiAgICA8aGVhZD4KICAgICAgICA8bWV0YSBodHRwLW\n" +"VxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRt\n" +"bDsgY2hhcnNldD1VVEYtOCI+CiAgICAgICAgPHRpdGxlPkpTUC\n" +"BQYWdlPC90aXRsZT4KICAgIDwvaGVhZD4KICAgIDxib2R5Pgog\n" +"ICAgICAgIDxoMT5IZWxsbyBXb3JsZCE8L2gxPgogICAgPC9ib2\n" +"R5Pgo8L2h0bWw+\n" +"------=_Part_46705_715015081.1699589700255--";
System.out.println(data);
HtmContentHandler contentHandler = new HtmContentHandler();
MimeConfig mime4jParserConfig = MimeConfig.DEFAULT;
BodyDescriptorBuilder bodyDescriptorBuilder = new DefaultBodyDescriptorBuilder();
MimeStreamParser mime4jParser = new MimeStreamParser(mime4jParserConfig, DecodeMonitor.SILENT, bodyDescriptorBuilder);
mime4jParser.setContentDecoding(true);
mime4jParser.setContentHandler(contentHandler);
mime4jParser.parse(new ByteArrayInputStream(data.getBytes(UTF_8)));
System.out.println(contentHandler.getData());

HtmContentHandler


import org.apache.commons.io.IOUtils;
import org.apache.james.mime4j.MimeException;
import org.apache.james.mime4j.dom.Header;
import org.apache.james.mime4j.field.ContentTypeFieldImpl;
import org.apache.james.mime4j.message.SimpleContentHandler;
import org.apache.james.mime4j.stream.BodyDescriptor;
import org.apache.james.mime4j.stream.Field;import java.io.IOException;
import java.io.InputStream;
import java.util.Optional;/*** @author zengrenyuan* @date 2023/11/10**/
public class HtmContentHandler extends SimpleContentHandler {private String data;private String charset;private String contentType;@Overridepublic void body(BodyDescriptor bd, InputStream is) throws MimeException, IOException {this.data = IOUtils.toString(is, Optional.ofNullable(charset).orElse("UTF-8"));//这里可以处理文本内容}@Overridepublic void headers(Header header) {//在这里解析头信息Field contentType = header.getField("Content-Type");if (contentType != null) {if (contentType instanceof ContentTypeFieldImpl) {this.contentType = ((ContentTypeFieldImpl) contentType).getMimeType();charset = ((ContentTypeFieldImpl) contentType).getParameter("charset");}}}public String getData() {return data;}public String getCharset() {return charset;}public String getContentType() {return contentType;}
}

参考资料

https://james.apache.org/mime4j/index.html
https://github.com/apache/james-mime4j

如果想解析一段Email数据也可以参考
https://github.com/ram-sharma-6453/email-mime-parser

http://www.lryc.cn/news/226036.html

相关文章:

  • 获取请求IP以及IP解析成省份
  • YOLOv8-seg改进:复现HIC-YOLOv5,HIC-YOLOv8-seg助力小目标分割
  • vscode 终端进程启动失败: shell 可执行文件“C:\Windows\System32\WindowsPower
  • 【中间件篇-Redis缓存数据库02】Redis高级特性和应用(慢查询、Pipeline、事务、Lua)
  • 栈 和 队列
  • 【推荐】一款AI写作大师、问答、绘画工具-「智元兔 AI」
  • 阿里云付费用户破100万 用户规模亚洲最大
  • 人工智能基础——Python:Matplotlib与绘图设计
  • Ubuntu 配置 Github 的 SSH keys
  • Flink—— Flink Data transformation(转换)
  • 前端读取文件当文件选择相同文件名的文件,内容不会变化
  • PHP 服装销售管理系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp
  • 用于图像处理的高斯滤波器 (LoG) 拉普拉斯
  • 【h5 uniapp】 滚动 滚动条,数据跟着变化
  • ModStartBlog v8.5.0 评论开关布局调整,系统后台全面优化
  • django|报错SQLite 3.8.3 or later is required的解决方案
  • 通达OA get_datas.php前台sql注入-可获取数据库session登入后台漏洞复现 [附POC]
  • 苹果官方:所有国行iPhone 15系列都在中国生产!
  • Oracle 安装及 Spring 使用 Oracle
  • element-ui 表格 点击选中
  • 畅通工程之局部最小花费问题 (C++)
  • Sql 异常 + Error
  • 基于UNI-APP实现适配器并保证适配器和实现的调用一致
  • 使用jdk21预览版 --enable-preview
  • js中的跳转都有哪些格式
  • 无重复字符的最长子串
  • C语言--输入10个数字,要求输出其中值最大的元素和该数字是第几个数
  • 如何做好功能测试,提升测试质量和效率?
  • 高德地图添加信息弹窗,信息弹窗是单独的组件
  • Apache Arrow优点