展开全部

// 从EML文件得到MimeMessage对象

MimeMessage message = new MimeMessage(session, new FileInputStream(emlFile));

public static String getMailSubject(Message message) throws Exception {

return MimeUtility.decodeText(message.getSubject());

}

public static String getMailSender(Message message) throws Exception {

String emailSender = null;

Address[] addresses = message.getFrom();

if (addresses == null || addresses.length

throw new IllegalArgumentException("该邮件没有发件人");

}

// 获得发e5a48de588b63231313335323631343130323136353331333337626137件人

InternetAddress address = (InternetAddress) addresses[0];

String senderName = address.getPersonal();

if (senderName != null) {

senderName = MimeUtility.decodeText(senderName);

emailSender = senderName + "";

} else {

senderName = address.getAddress();

}

return emailSender;

}

public static String getMailRecipients(Message message, Message.RecipientType recipientType) throws Exception {

StringBuilder builder = new StringBuilder();

Address[] addresses = null;

if (recipientType == null) {

addresses = message.getAllRecipients();

} else {

addresses = message.getRecipients(recipientType);

}

if (addresses == null || addresses.length

throw new IllegalArgumentException("该邮件没有收件人");

}

for (Address address : addresses) {

InternetAddress iAddress = (InternetAddress) address;

builder.append(iAddress.toUnicodeString()).append(", ");

}

return builder.deleteCharAt(builder.length() - 1).toString();

}

public static String getMailSendDate(Message message, String pattern) throws Exception {

String sendDateString = null;

if (pattern == null || "".equals(pattern.trim())) {

pattern = "yyyy年MM月dd日 E HH:mm";

}

Date sendDate = message.getSentDate();

sendDateString = new SimpleDateFormat(pattern).format(sendDate);

return sendDateString;

}

public static boolean containsAttachment(Part part) throws Exception {

boolean flag = false;

if (part != null) {

if (part.isMimeType("multipart/*")) {

MimeMultipart mp = (MimeMultipart) part.getContent();

for (int i = 0; i

BodyPart bodyPart = mp.getBodyPart(i);

String disposition = bodyPart.getDisposition();

if (disposition != null && (Part.ATTACHMENT.equalsIgnoreCase(disposition)

|| Part.INLINE.equalsIgnoreCase(disposition))) {

flag = true;

} else if (bodyPart.isMimeType("multipart/*")) {

flag = containsAttachment(bodyPart);

} else {

String contentType = bodyPart.getContentType();

if (contentType.indexOf("application") != -1) {

flag = true;

}

if (contentType.indexOf("name") != -1) {

flag = true;

}

}

if (flag)

break;

}

} else if (part.isMimeType("message/rfc822")) {

flag = containsAttachment((Part) part.getContent());

}

}

return flag;

}

public static boolean isSeen(Message message) throws Exception {

if (message == null) {

throw new MessagingException("Message is empty");

}

return message.getFlags().contains(Flags.Flag.SEEN);

}

public static boolean isReplaySign(Message message) throws Exception {

if (message == null) {

throw new MessagingException("Message is empty");

}

boolean replaySign = false;

String[] headers = message.getHeader("Disposition-Notification-To");

if (headers != null && headers.length > 0) {

replaySign = true;

}

return replaySign;

}

public static String getMailPriority(Message message) throws Exception {

if (message == null) {

throw new MessagingException("Message is empty");

}

String priority = "普通";

String[] headers = message.getHeader("X-Priority");

if (headers != null && headers.length > 0) {

String mailPriority = headers[0];

if (mailPriority.indexOf("1") != -1 || mailPriority.indexOf("High") != -1) {

priority = "紧急";

} else if (mailPriority.indexOf("5") != -1 || mailPriority.indexOf("Low") != -1) {

priority = "低";

} else {

priority = "普通"; // 3或者Normal;

}

}

return priority;

}

public static void getMailTextContent(Part part, StringBuilder content) throws Exception {

if (part == null) {

throw new MessagingException("Message content is empty");

}

boolean containsTextInAttachment = part.getContentType().indexOf("name") > 0;

if (part.isMimeType("text/*") && containsTextInAttachment) {

content.append(part.getContent().toString());

} else if (part.isMimeType("message/rfc822")) {

getMailTextContent((Part) part.getContent(), content);

} else if (part.isMimeType("multipart/*")) {

Multipart mp = (Multipart) part.getContent();

for (int i = 0; i

BodyPart bodyPart = mp.getBodyPart(i);

getMailTextContent(bodyPart, content);

}

} else if (part.isMimeType("image/*")) {

// TODO part.getInputStream()获得输入流然后输出到指定的目录

} else {

// TODO 其它类型的contentType, 未做处理, 直接输出

content.append(part.getContent().toString());

}

}

public static void saveAttachment(Part part, String destDir) throws Exception {

if (part == null) {

throw new MessagingException("part is empty");

}

// 复杂的邮件包含多个邮件体

if (part.isMimeType("multipart/*")) {

Multipart mp = (Multipart) part.getContent();

// 遍历每一个邮件体

for (int i = 0; i

BodyPart bodyPart = mp.getBodyPart(i);

// bodyPart也可能有多个邮件体组成

String disposition = bodyPart.getDisposition();

if (disposition == null && (Part.ATTACHMENT.equalsIgnoreCase(disposition)

|| Part.INLINE.equalsIgnoreCase(disposition))) {

InputStream in = bodyPart.getInputStream();

saveFile(in, destDir, decodeText(bodyPart.getFileName()));

} else if (bodyPart.isMimeType("multipart/*")) {

saveAttachment(bodyPart, destDir);

} else {

String contentType = bodyPart.getContentType();

if (contentType.indexOf("name") != -1 || contentType.indexOf("application") != -1) {

saveFile(bodyPart.getInputStream(), destDir, decodeText(bodyPart.getFileName()));

}

}

}

} else if (part.isMimeType("message/rfc822")) {

saveAttachment((Part) part.getContent(), destDir);

}

}

public static void saveFile(InputStream in, String destDir, String fileName) throws Exception {

FileOutputStream out = new FileOutputStream(new File(destDir + fileName));

byte[] buffer = new byte[1024];

int length = 0;

while ((length = in.read(buffer)) != -1) {

out.write(buffer, 0, length);

}

out.close();

in.close();

}

public static String decodeText(String encodedText) throws Exception {

if (encodedText == null || "".equals(encodedText.trim())) {

return "";

} else {

return MimeUtility.decodeText(encodedText);

}

}

java eml文件解析_java 解析 eml的源代码相关推荐

  1. java底层 文件操作_JAVA的文件操作【转】

    11.3 I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程 ...

  2. java 获取文件权限_Java中的文件权限,检查权限和更改权限 - Break易站

    Java提供了许多方法调用来检查和更改文件的权限,例如可以将只读文件更改为具有写入权限.当用户想要限制文件允许的操作时,需要更改文件权限.例如,文件权限可以从写入更改为只读,因为用户不再想要编辑文件. ...

  3. java web文件夹_JAVA WEB项目文件夹上传下载解决方案

    这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...

  4. java io文件操作_java IO 文件操作方法总结

    java IO 文件操作方法总结 对于输入输出的理解: 输入输出,以程序为参考点,外部数据进入程序,通过输入流完成.程序将数据给外部设备,通过输出流完成. 文件Io的操作 //获取文件 File fi ...

  5. java 轻量级文件数据库_Java:如何创建轻量级数据库微服务

    java 轻量级文件数据库 基于云的Java数据库应用程序的数量每分钟都在增加. 许多组织部署了数百甚至数千个微服务实例. 但是,相对于运行时环境,大多数应用程序会带来惊人的不必要开销. 反过来,这会 ...

  6. java 二进制 文件比较_Java中对文件的读写操作之比较

    Java 中对文件的读写操作之比较 作者:Jeru Liu 日期:November 29,2000 版本:1.0 纪念在chinaasp积分过一百呕心原创一篇(Java 中对文件的读写操作之比较)拿分 ...

  7. java检测文件修改_Java 实例 – 查看主机指定文件的最后修改时间

    Java 实例 - 查看主机指定文件的最后修改时间 以下实例演示了如何查看主机指定文件的最后修改时间: /* author by w3cschool.cn Main.java */ import ja ...

  8. java读取文件 路径_Java中的获取文件的物理绝对路径,和读取文件

    获取文件的绝对路径,读取该文件 一.文件目录打印图 下面的文件目录图,是项目中文件的位置信息:下面的例子是按照这个图来演示的. . |-- java | |-- ibard | | |-- demo1 ...

  9. java 改变文件权限_Java文件权限

    java 改变文件权限 Java File class contains methods to check file permissions for the application user. The ...

最新文章

  1. pandas使用read_csv函数读取文件最后N行数据并保留表头、pandas使用read_csv函数读取网络url链接数据
  2. real6410 裸机实验- LED
  3. .NET的一点历史故事:Novell的崩溃和Xamarin的重生
  4. apache derby_Apache Derby数据库JVM安全策略
  5. palapaweb怎样开启服务_为什么说微服务,要从前后端分离开始?一文带你揭秘深入微服务...
  6. 删不干净_“我劝你别删前任微信”
  7. 多媒体计算机辅助教学与课件制作,清华大学出版社-图书详情-《计算机辅助教学多媒体课件设计制作与应用》...
  8. python视频延迟严重_利用多进程降低opencv视频延迟处理rtsp视频流
  9. 百搭手绘卡通牛年吉祥生肖素材,萌到心里的小牛
  10. python getcwd_Python os.getcwd()方法
  11. Windows Server 2008 启用公共文件夹共享
  12. sql数据库如何分离
  13. 华为云虚拟主机的防火墙设置
  14. 安装Centos8设置基础软件仓库时出错
  15. 【身份证识别】基于matlab GUI形态学二代身份证号码识别系统【含Matlab源码 948期】
  16. 网络安全认证与加密协议算法整合
  17. 智慧井盖物联网解决方案
  18. SQL语句中的嵌套子查询
  19. 如何批量新建文件夹并重命名
  20. 从文艺青年到2B青年,轻博客的N种玩法

热门文章

  1. 太秀了!单片机内置 ADC 实现高分辨率采样?
  2. Dubbo to Mesh 云原生架构改造方案解析
  3. 200 个工具分析机器学习十年:前途未卜、工程师是核心!
  4. 亚信科技公布2019年度业绩,5G商用效果凸显
  5. 深度好文 | 中间人攻击、ARP欺骗背后的原理及漏洞还原
  6. @程序员,如何花式构建线程?
  7. 盘点 12 款让开发效率“飞起”的 VS Code 插件
  8. 华为回应关于“获政府巨额补贴”报道;最高法:微信微博聊天记录可作为证据;GoLand 2020.1 路线图公布 | 极客头条...
  9. 百度大脑语音能力引擎论坛定档 11.28,邀你一同解码 AI 语音的奥秘
  10. Android 10 重磅来袭:支持 5G 与折叠屏、隐私安全全面升级!