欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java实现 生成excel附件表格(群发/单发 附件到邮箱)

程序员文章站 2022-06-09 20:13:47
使用javax.mail和poi生成excel表格 群发/单发 附件 到邮箱maven导入依赖:` org.apache.poi poi-ooxml 3.17

使用javax.mail和poi生成excel表格 群发/单发 附件 到邮箱

  1. maven导入依赖:`
<!--poi生成excel依赖--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <!-- 发送邮件依赖 --> <!-- 发送邮件主要依赖这个包 导入的时候注意一下 不要导成了下面com.sun.mail--> <dependency> <groupId>javax.mail</groupId> <artifactId>javax.mail-api</artifactId> <version>1.6.0</version> </dependency> <!-- 代码里面主要session依赖这个包 不要导错了--> <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.0</version> </dependency> </dependencies> 
  1. 使用poi制作excel生成字节数组输入流
 //创建工作簿(传入的是我的数据集合 ) public InputStream markExcelByDataList(List<MemberInfo> dataList) { String sheetName = "erp采购执行人员消息"; XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet(sheetName); //表头 String[] headers = {"采购人员名称", "采购人员手机号码"}; int[] widths = {4000, 9000}; //写入表头 XSSFRow row = sheet.createRow(0); for (int i = 0; i < headers.length; i++) { sheet.setColumnWidth(i, widths[i]); XSSFCell cell = row.createCell(i); XSSFRichTextString text = new XSSFRichTextString(headers[i]); cell.setCellValue(text); } //写入数据 for (int i = 0; i < dataList.size(); i++) { XSSFRow rowObj = sheet.createRow(i + 1); rowObj.createCell(0).setCellValue(dataList.get(i).getName()); rowObj.createCell(1).setCellValue(dataList.get(i).getMobile()); } ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { workbook.write(bos); bos.flush(); } catch (IOException e) { e.printStackTrace(); logger.info("创建工作簿异常"); } byte[] bt = bos.toByteArray(); return new ByteArrayInputStream(bt, 0, bt.length); } 
  1. 发送邮件(传入上面的输入流,附件文件名称)
public boolean sendExcelEmail(InputStream is, String fileName) { Transport transport = null; try { System.setProperty("mail.mime.splitlongparameters", "false"); Properties props = new Properties(); // 设置发送邮件的邮件服务器的属性 (”主机固定key名称“,"公司邮箱服务器地址 例如qq的是smtp.qq.com 可以在QQ邮箱看到的"); props.put("mail.smtp.host", "smtp.xxxxx.com"); // 需要经过授权,也就是有户名和密码的校验,这样才能通过验证(”固定key“,"固定boolean值") props.put("mail.smtp.auth", "true"); // 用刚刚设置好的props对象构建一个session Session session = Session.getDefaultInstance(props); // 在发送邮件的过程中在console处显示过程信息 session.setDebug(false); // 用session为参数定义消息对象 MimeMessage message = new MimeMessage(session); // 加载发件人地址(这是我公司的企业邮箱地址) message.setFrom(new InternetAddress("xxxxx@xxx.com")); //邮件群发 maillArray为收件人地址 String[] mailArray = {"xxxxxxxxxxx@qq.com", "xxxxxxxxxx@qq.com"}; InternetAddress address[] = new InternetAddress[mailArray.length]; for (int i = 0; i < mailArray.length; i++) { address[i] = new InternetAddress(mailArray[i]); } // 邮件单发(上面群发的就不要了) //            message.addRecipient(Message.RecipientType.TO, new InternetAddress("收件人地址@qq.com")); // 加载邮件标题 message.setSubject(fileName); // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件 Multipart mimeMultipart = new MimeMultipart(); // 设置邮件的文本内容(因为发的是附件 所以需要这个) BodyPart contentPart = new javax.mail.internet.MimeBodyPart(); contentPart.setText("请查看附件"); mimeMultipart.addBodyPart(contentPart); // 添加附件 BodyPart messageBodyPart = new javax.mail.internet.MimeBodyPart(); DataSource source = new ByteArrayDataSource(is, "application/msexcel"); // 添加附件的内容 messageBodyPart.setDataHandler(new DataHandler(source)); // 添加附件的标题(因为发送的是excel  所以一定要有这个注释) messageBodyPart.setFileName(MimeUtility.encodeText(fileName + ".xls")); mimeMultipart.addBodyPart(messageBodyPart); // 将multipart对象放到message中 message.setContent(mimeMultipart); // 保存邮件 message.saveChanges(); // 发送邮件 transport = session.getTransport("smtp"); // 连接服务器的邮箱(公司邮箱服务器地址 和上面那个一样,邮箱账户,邮箱密码) transport.connect("smtp.xxxxx.com", "xxxx@xxx.com", "密码"); // 把邮件发送出去  群发 transport.sendMessage(message, address); //  把邮件发送出去  单发(上面群发就不要了) //            transport.sendMessage(message, message.getAllRecipients()); return true; } catch (Throwable e) { e.printStackTrace(); return false; } finally { try { transport.close(); } catch (Exception e) { e.printStackTrace(); } } } 
  1. 调用发送方法
 //创建工作簿(传入数据集合) InputStream inputStream = this.markExcelByDataList(dataList); //群发邮件 boolean res = this.sendExcelEmail(inputStream, "附件名称"); if (res) { logger.info("发送rep采购员人员信息成功"); return true; } 

本文地址:https://blog.csdn.net/weixin_44647159/article/details/108851517