JAVA解析eml格式的邮件


依赖



   commons-io
   commons-io
   2.11.0



  javax.mail
  mail
  1.4.7



  org.apache.commons
  commons-email
  1.5

代码

public class Test {
    public static void main(String[] args) {
        String dir = "D:/test/";
        try(InputStream inputStream = new FileInputStream(dir+"test3.eml")) {
            Properties props = new Properties();
            Session session = Session.getDefaultInstance(props, null);
            MimeMessage msg = new MimeMessage(session, inputStream);
            MimeMessageParser parser = new MimeMessageParser(msg).parse();
            //邮件唯一id
            String messageId = parser.getMimeMessage().getMessageID();
            System.out.println(messageId);
            //发件人
            String from = parser.getFrom();
            System.out.println(from);
            //收件人列表
            List
toArray = parser.getTo(); System.out.println(toArray); //抄送人列表 List
ccArray = parser.getCc(); System.out.println(ccArray); //密送人列表 List
bccArray = parser.getBcc(); System.out.println(bccArray); //邮件发送时间 Date sendDate = parser.getMimeMessage().getSentDate(); System.out.println(sendDate); //邮件主题 String subject = parser.getSubject(); System.out.println(subject); //获取正文 String html = parser.getHtmlContent(); System.out.println(html); //所有文件,包括附件和正文中的图片等文件 List dataSources = parser.getAttachmentList(); //获取不到html内容时,则获取非html文本内容 if (html == null || html.length()==0) { String plain = parser.getPlainContent(); System.out.println(plain); }else { //获取正文中的图片等文件 Collection contentIds = parser.getContentIds(); for (String contentId : contentIds) { DataSource contentFile = parser.findAttachmentByCid(contentId); dataSources.remove(contentFile); String name = contentFile.getName(); InputStream is = contentFile.getInputStream(); FileUtils.copyInputStreamToFile(is,new File(dir+name)); html = html.replace("cid:"+contentId,name); } FileUtils.writeStringToFile(new File(dir+"test.html"),html, Charset.defaultCharset()); } for (DataSource dataSource : dataSources) { String name = dataSource.getName(); System.out.println(name); InputStream is = dataSource.getInputStream(); FileUtils.copyInputStreamToFile(is,new File(dir+name)); } }catch (Exception e) { e.printStackTrace(); } } }