java读取邮件excel附件的方法过程示例

 更新时间:2023年10月07日 15:35:11   作者:光法V3  
这篇文章主要介绍了java读取邮件excel附件的方法过程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

java读取excel附件的方法

项目中会遇到读取邮件excel附件的信息至后台,下面分享一个java读取excel附件的方法。

1、要在后台中读取邮箱附件邮箱必须开启IMAP服务

下图示例为QQ邮箱开启对应服务的设置方法(其他邮箱也可找到对应的设置):

按照提示开通对应服务,需要注意的是如果邮箱使用的是授权码,则需要在后续使用时用授权码代替密码,授权码授权方式更为安全。

2、添加依赖

收发邮件依赖jakarta.mail

<dependency>
  <groupId>com.sun.mail</groupId>
  <artifactId>jakarta.mail</artifactId>
  <version>{version}</version>
</dependency>

读取execel文件依赖POI

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi</artifactId>
   <version>{version}</version>
</dependency>
<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi-ooxml</artifactId>
   <version>{version}</version>
</dependency>

3、读取接收到的邮件,并读取附件信息

3.1读取接收到的邮件代码:

//设置邮箱服务器地址、端口、用户
Properties props = new Properties();
props.setProperty("mail.imapStore.protocol","imap");
props.setProperty("mail.imap.host", "邮箱服务器host");
props.setProperty("mail.imap.port","邮箱服务端口");
// 是否启用ssl
if (useSsl.equals(1)) {
  MailSSLSocketFactory sf = new MailSSLSocketFactory();
  sf.setTrustAllHosts(true);
  props.put("mail.imap.ssl.enable", true);
  props.put("mail.imap.ssl.socketFactory", sf);
  props.put("mail.imap.ssl.protocols", "TLSv1.2");
}
Session session = Session.getInstance(props);
IMAPStore imapStore = (IMAPStore) session.getStore("imap");
// 输入邮箱及密码(授权码)
imapStore.connect("邮箱服务器host", "邮箱服务端口", "email地址","email密码(授权码)");
//打开收件箱
IMAPFolder imapFolder = (IMAPFolder) imapStore.getFolder("INBOX");
if (!imapFolder.isOpen()) {
   imapFolder.open(Folder.READ_ONLY);
}
//读取指定时间之后的邮件数据
SearchTerm searchTerm = new ReceivedDateTerm(ComparisonTerm.GT, new Date(时间戳));
// 取到文件夹中所有信息
Message[] messages = imapFolder.search(searchTerm);
// 循环处理读取到的邮件信息
for (Message message : messages) {
   // 读取附件
   readAttachment(message )   
}

3.2读取附件并且缓存代码:

public List<EmailAttachmentPojo> readAttachment(Part part) throws Exception {
        List<EmailAttachmentPojo> bodyParts = new LinkedList<>();
        if (part.isMimeType("multipart/*")) {
            Multipart multipart = (Multipart) part.getContent();    //复杂体邮件
            //复杂体邮件包含多个邮件体
            int partCount = multipart.getCount();
            for (int i = 0; i < partCount; i++) {
                // 获得复杂体邮件中其中一个邮件体
                BodyPart bodyPart = multipart.getBodyPart(i);
                // 某一个邮件体也有可能是由多个邮件体组成的复杂体
                String disposition = bodyPart.getDisposition();
                if (disposition != null && (disposition.equalsIgnoreCase(Part.ATTACHMENT) || disposition.equalsIgnoreCase(Part.INLINE))) {
                    bodyParts.add(EmailAttachmentPojo.builder()
                            .bodyPart(bodyPart)
                            .filename(decodeText(bodyPart.getFileName()))
                            .build());
                } else if (bodyPart.isMimeType("multipart/*")) {
                    bodyParts.addAll(readAttachment(bodyPart));
                } else {
                    String contentType = bodyPart.getContentType();
                    if (contentType.contains("name") || contentType.contains("application")) {
                        bodyParts.add(EmailAttachmentPojo.builder()
                                .bodyPart(bodyPart)
                                .filename(decodeText(bodyPart.getFileName()))
                                .build());
                    }
                }
            }
        } else if (part.isMimeType("message/rfc822")) {
            bodyParts.addAll(readAttachment((Part) part.getContent()));
        }
        return bodyParts;
}

3.3读取附件excel里的内容

使用POI读取excel的步骤:

1.创建工作簿

2.获取工作表

3.遍历工作表获得行对象

4.遍历行对象获取单元格对象

5.获得单元格中的值

读取excel内容代码示例:

// 1.获取工作簿
XSSFWorkbook workbook = new XSSFWorkbook("C:\\Users\\ghost\\Desktop\\hello.xlsx");
// 2.获取工作表
// xlsx第一个工作簿(Sheet1),下标从0开始,0就是第一个
XSSFSheet sheet = workbook.getSheetAt(0);
// 开始索引(0) 结束索引
int lastRowNum = sheet.getLastRowNum(); //行的结束索引
for (int i = 0; i <= lastRowNum; i++) {
    // 拿到行
    XSSFRow row = sheet.getRow(i);
    if (row != null){
        short cellNum = row.getLastCellNum(); //单元格的结束索引
        for (int j = 0; j <= cellNum; j ++){
            XSSFCell cell = row.getCell(j);
            // 单元格不为空就去拿他的值
            if (cell != null){
                String stringCellValue = cell.getStringCellValue();
                System.out.println(stringCellValue);
            }
        }
    }
}
// 释放资源
workbook.close();

基于上述读取邮件和读取excel文件的方法就可以从邮箱中获取到所需要的业务数据,更多关于java读取邮件附件的资料请关注脚本之家其它相关文章!

相关文章

  • idea中引入了gb2312编码的文件的解决方法

    idea中引入了gb2312编码的文件的解决方法

    这篇文章主要介绍了idea中引入了gb2312编码的文件的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 使用@Validated和@Valid 解决list校验的问题

    使用@Validated和@Valid 解决list校验的问题

    这篇文章主要介绍了使用@Validated和@Valid 解决list校验的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • java执行shell命令及日志收集避坑指南分享

    java执行shell命令及日志收集避坑指南分享

    这篇文章主要介绍了java执行shell命令及日志收集避坑指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Java Cookie与Session实现会话跟踪详解

    Java Cookie与Session实现会话跟踪详解

    session的工作原理和cookie非常类似,在cookie中存放一个sessionID,真实的数据存放在服务器端,客户端每次发送请求的时候带上sessionID,服务端根据sessionID进行数据的响应
    2022-11-11
  • java  StringBuilder类的详解及简单实例

    java StringBuilder类的详解及简单实例

    这篇文章主要介绍了java StringBuilder类的详解及简单实例的相关资料,实现了StringBuilder类的追加、插入、替换、删除等操作,需要的朋友可以参考下
    2017-08-08
  • 详解springMVC之与json数据交互方法

    详解springMVC之与json数据交互方法

    本篇文章主要介绍了详解springMVC之与json数据交互方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 如何在Spring中使用编码方式动态配置Bean详解

    如何在Spring中使用编码方式动态配置Bean详解

    这篇文章主要给大家介绍了关于如何在Spring中使用编码方式动态配置Bean的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • SpringMVC异常全局捕获与错误响应的处理方法

    SpringMVC异常全局捕获与错误响应的处理方法

    编程式异常处理是通过在代码中 显式编写异常捕获逻辑(如 try-catch 块)来管理异常的方式,开发者需要手动处理每一个可能抛出异常的代码段,本文给大家介绍SpringMVC异常全局捕获与错误响应的处理方法,感兴趣的朋友一起看看吧
    2025-03-03
  • MyEclipse2018中安装Mybatis generator插件的实现步骤

    MyEclipse2018中安装Mybatis generator插件的实现步骤

    这篇文章主要介绍了MyEclipse2018中安装Mybatis generator插件的实现步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • 详解java中各类锁的机制

    详解java中各类锁的机制

    这篇文章为大家总结了java中常见的锁(互斥锁、读写锁、公平锁与非公平锁等)的机制以及如何使用,文中示例代码讲解详细,需要的可以学习一下
    2021-12-12

最新评论