JAVA 数据写入excel并发送邮件

打印 上一主题 下一主题

主题 930|帖子 930|积分 2790

写这个的时候PLM系统还没有开辟好,开辟这个系统的外包团队每次开会都会被骂,感觉他们快顶不住了,估计完成不了了,烂尾之后应该会有许多需求扔给我。新领导上任之后说这边能不能发邮件,先熟悉一下怎么发邮件吧,这个功能大概率给我来做了
流程:
​    先导包 => 邮箱开启配置 => java写好配置类 => 测试发送 => 数据写入excel => 邮件带附件发送
邮箱jar包
  1. <dependencies>
  2.     <dependency>
  3.     <groupId>com.sun.mail</groupId>
  4.     <artifactId>javax.mail</artifactId>
  5.     <version>1.6.2</version>
  6.     </dependency>
  7. </dependencies>
复制代码
邮箱开启配置

我这个是163的,开启之后会生成授权码,记得复制粘贴到本身的项目配置文件里面去

邮箱配置类
  1. public final class JavaMailUtil {
  2.     //文件地址 上面是linux地址,下面是我自己本地测试用的
  3.     //public final static String FILEPATH = "/wenjie/javaProject/bomexcelfiles";
  4.     public final static String FILEPATH = "e:/Users/liuwenj/Desktop/";
  5.    
  6.     private JavaMailUtil() {
  7.     }
  8.     public static Session createSession() {
  9.         //账号信息
  10.         String username = "";//邮箱发送账号
  11.         String password = "";//邮箱授权码
  12.         //创建一个配置文件,并保存
  13.         Properties props = new Properties();
  14.         //SMTP服务器连接信息
  15.         //126——smtp.126.com
  16.         //163——smtp.163.com
  17.         props.put("mail.smtp.host", "smtp.126.net");//SMTP主机名
  18.         //126——25
  19.         //163——645 如果645一直连不上,可以换成25试一试
  20.         props.put("mail.smtp.port", "25");// 主机端口号
  21.         props.put("mail.smtp.auth", "true");// 是否需要用户认证
  22.         props.put("mail.smtp.starttls.enable", "true");// 启用TlS加密
  23.         Session session = Session.getInstance(props, new Authenticator() {
  24.             @Override
  25.             protected PasswordAuthentication getPasswordAuthentication() {
  26.                 // TODO Auto-generated method stub
  27.                 return new PasswordAuthentication(username, password);
  28.             }
  29.         });
  30.         //控制台打印调试信息
  31.         session.setDebug(true);
  32.         return session;
  33.     }
  34. }
复制代码
测试发送纯文本
  1. //创建Session会话
  2. Session session = JavaMailUtil.createSession();
  3. //创建邮件对象
  4. MimeMessage message = new MimeMessage(session);
  5. message.setSubject("主题");
  6. message.setFrom(new InternetAddress("发送者邮箱"));
  7. //发送给一个人
  8. message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("接收者邮箱"));
  9. //发送给多个人
  10. //message.setRecipients(MimeMessage.RecipientType.CC, new InternetAddress[] {new InternetAddress("接收者邮箱")});
  11. //纯文本信息
  12. message.setText("文本信息:来自于公司PLM系统测试");
  13. //发送
  14. Transport.send(message);
复制代码
数据写入excel,并生成文件

先导jar
  1. <dependency>
  2.     <groupId>org.apache.poi</groupId>
  3.     <artifactId>poi</artifactId>
  4.     <version>5.2.3</version>
  5. </dependency>
  6. <dependency>
  7.     <groupId>org.apache.poi</groupId>
  8.     <artifactId>poi-ooxml</artifactId>
  9.     <version>5.2.3</version>
  10. </dependency>
复制代码
写入数据到excel
  1. Workbook workbook = new XSSFWorkbook();
  2. Sheet sheet = workbook.createSheet("Bom");
  3. //第一行的数据名
  4. List<String> labelList = Arrays.asList("物料编码", "描述");
  5. Row row = sheet.createRow(0);
  6. for (int i = 0; i < labelList.size(); i++) {
  7.     row.createCell(i).setCellValue(labelList.get(i));
  8. }
  9. int rowNo = 1;
  10. //获取数据然后放入Excel
  11. List<Map<String, Object>> bomList = plmDataService.getBomNotPerfect();
  12. for (Map<String, Object> bom : bomList) {
  13.     String no = (String) bom.get("ITEM_NUMBER");
  14.     String desc = (String) bom.get("DESCRIPTION");
  15.     Row tempRow = sheet.createRow(rowNo);
  16.     rowNo++;
  17.     tempRow.createCell(0).setCellValue(no);
  18.     tempRow.createCell(1).setCellValue(desc);
  19. }
  20. // 写入数据到Excel
  21. try (FileOutputStream outputStream = new FileOutputStream(JavaMailUtil.FILEPATH + fileName)) {
  22.     workbook.write(outputStream);
  23. } catch (IOException e) {
  24.     e.printStackTrace();
  25. } finally {
  26.     try {
  27.         workbook.close(); //关闭工作簿
  28.     } catch (IOException e) {
  29.         e.printStackTrace();
  30.     }
  31. }
复制代码
齐备预备停当之后就可以发送邮件了
发送邮件(带附件)
  1. //创建会话
  2. Session session = JavaMailUtil.createSession();
  3. //创建邮件对象
  4. MimeMessage message = new MimeMessage(session);
  5. message.setSubject("主题");
  6. message.setFrom(new InternetAddress("发送者邮箱"));
  7. //发送给一个人
  8. message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("接收者邮箱"));
  9. //发送给多个人
  10. //message.setRecipients(MimeMessage.RecipientType.CC, new InternetAddress[] {new InternetAddress("接收者邮箱")});
  11. //邮件主体
  12. BodyPart textPart = new MimeBodyPart();
  13. textPart.setContent("文本信息:来自于公司PLM系统测试", "text/html;charset=utf-8");
  14. //邮件附件
  15. BodyPart filePart = new MimeBodyPart();
  16. filePart.setFileName(fileName);
  17. //提交附件文件
  18. filePart.setDataHandler(new DataHandler(new ByteArrayDataSource(Files.readAllBytes(Paths.get(JavaMailUtil.FILEPATH + fileName)), "application/octet-stream")));
  19. Multipart multipart = new MimeMultipart();
  20. multipart.addBodyPart(textPart);
  21. multipart.addBodyPart(filePart);
  22. //将邮件装入信封
  23. message.setContent(multipart);
  24. //发送
  25. Transport.send(message);
复制代码
如果有发送一些特殊需求,好比需要内嵌图片HTML
发送邮件(内嵌图片HTML)

PS: 没有试过,copy的代码,贴上去以后如果有需求了再验证
  1. Session session = JavaMailUtils.createSession(); //创建session对象
  2. MimeMessage message = new MimeMessage(session); //创建message对象
  3. message.setSubject("测试邮件"); //设置邮件标题
  4. message.setFrom(new InternetAddress("xxxxxx@163.com")); //设置发送方地址
  5. message.setRecipient(RecipientType.TO, new InternetAddress("xxxxxx@qq.com")); //设置接收方地址
  6. message.setRecipients(RecipientType.CC, new InternetAddress[] {new InternetAddress("xxxxxx@qq.com"),new InternetAddress("xxxxxx@qq.com")}); //群发(抄送多人)
  7. //正文
  8. BodyPart textPart=new MimeBodyPart();
  9. StringBuilder contentText=new StringBuilder();
  10. contentText.append("<h3>网易邮箱/h3>");
  11. contentText.append("<p>给QQ邮箱发消息了!</p>");
  12. contentText.append("<img src="cid:xxx"/>");  
  13. textPart.setContent(contentText.toString(),"text/html;charset=utf-8");
  14. //附件
  15. BodyPart imagePart=new MimeBodyPart();  
  16. imagePart.setDataHandler(new DataHandler(
  17.     new ByteArrayDataSource(Files.readAllBytes(Paths.get("D://test//1.jpg")), "application/octet-stream"))); //
  18. imagePart.setHeader("Content-ID", "xxx"); //图片的内容ID
  19. Multipart multipart=new MimeMultipart(); //创建multipart对象
  20. multipart.addBodyPart(textPart); //将textPart对象放入multipart
  21. multipart.addBodyPart(filePart); //将filePartt对象放入multipart
  22. message.setContent(multipart); //将multipart对象放入邮件
  23. Transport.send(message); //发送邮件
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

汕尾海湾

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表