java导出execl并发送邮件

添加jar包
activation.jar
mail.jar

maven的话

	<dependency>
			<groupId>javax.mail</groupId>
			<artifactId>mail</artifactId>
			<version>1.4.7</version>
		</dependency>

javaMail核心类
1、Session 可以理解为jdbc中Connection的作用
2、MimeMessage 邮件信息类
3、Transport 发送器用来发送邮件的

导出execl这里就不写了,但是需要将execl生成数据流

 //生成execl数据流
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        workBook.write(os);
        ByteArrayInputStream iss = new ByteArrayInputStream(os.toByteArray());
        os.close();
        long startTime = System.currentTimeMillis();
        String time = DateUtils.getStrDate(startTime, DateUtils.DATE_FORMAT) + "区域平安每日新增变更汇总表";
        try {
            //发送邮件
            Properties prop = new Properties();
            prop.setProperty("mail.smtp.host", "smtp.126.com");
            prop.setProperty("mail.smtp.auth", "true");
            prop.setProperty("mail.transport.protocol", "smtp");

            MailSSLSocketFactory sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            prop.put("mail.smtp.ssl.enable", "true");
            prop.put("mail.smtp.ssl.socketFactory", sf);

            prop.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            prop.put("mail.smtp.socketFactory.fallback", "false");

            Session session = Session.getInstance(prop);
            session.setDebug(true);
            Transport ts = session.getTransport();

            ts.connect("smtp.126.com", "邮箱名", "授权码");

            String content = time;
            String title = DateUtils.getStrDate(startTime, DateUtils.DATE_FORMAT) + "区域平安每日新增变更汇总表";
            String toUser = changeSetService.findByNamedParam(null).getEMail();

            //导出excel
            ByteArrayInputStream inputStream = iss;
            Message message = createAttachMailXlsx(session, title, content, toUser, inputStream, ".xlsx");
            ts.sendMessage(message, message.getAllRecipients());
            ts.close();

            logger.info("---区域平安每日新增变更汇总表---邮件发送成功---");

        } catch (Exception e) {
            System.out.println(e.getMessage());
            logger.info("--区域平安每日新增变更汇总表--邮件发送成功--");
        }
    }

    public static MimeMessage createAttachMailXlsx(Session session, String title, String content, String toUser, ByteArrayInputStream iss, String suffix) throws MessagingException, IOException {
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress("发件人邮箱名"));
        List<String> list = JSON.parseArray(toUser, String.class);
        //一个收件人
        InternetAddress[] sendTo = InternetAddress.parse(String.valueOf(list.get(0)));
        message.setRecipients(MimeMessage.RecipientType.TO, sendTo);
        list.remove(list.get(0));
        //多个抄送人,这里特别注意一下,直接list循环是不能抄送多个收件人的
        Address[] address = new InternetAddress[list.size()];
        for (int i = 0; i < list.size(); i++) {
            address[i] = new InternetAddress(list.get(i));
        }
        message.setRecipients(Message.RecipientType.CC, address);

        message.setSubject(title);
        message.setSentDate(new Date());

        MimeBodyPart bodyPart = new MimeBodyPart();
        bodyPart.setContent(content, "text/html;charset=UTF-8");

        MimeBodyPart attachPart = new MimeBodyPart();
        /*************3.文件流*************/
        DataSource dataSource = new ByteArrayDataSource(iss, "application/excel");
        DataHandler dataHandler = new DataHandler(dataSource);
        attachPart.setDataHandler(dataHandler);
        //解决execl名中文乱码
        attachPart.setFileName(MimeUtility.encodeText(title) + suffix);

        MimeMultipart multipart = new MimeMultipart();
        multipart.addBodyPart(bodyPart);
        multipart.addBodyPart(attachPart);
        multipart.setSubType("mixed");

        message.setContent(multipart);

        return message;
    }

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Java代码导出Excel表格并发送到指定邮箱,可以使用Apache POI库来操作Excel文件,以及JavaMail库来发送邮件。下面是一个简单的示例代码: 1. 导出Excel表格: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; import java.io.IOException; public class ExcelExporter { public static void exportToExcel() { // 创建工作簿 Workbook workbook = new XSSFWorkbook(); // 创建工作表 Sheet sheet = workbook.createSheet("Sheet1"); // 创建行和单元格,并填充数据 Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("Hello"); // 保存Excel文件 try (FileOutputStream outputStream = new FileOutputStream("output.xlsx")) { workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } } } ``` 2. 发送Excel表格到指定邮箱: ```java import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Properties; public class EmailSender { public static void sendEmailWithAttachment(String recipient, String subject, String body, String attachmentPath) { // 邮件发送者的配置信息 String senderEmail = "your_email@example.com"; String senderPassword = "your_password"; // 邮件服务器的配置信息 String host = "smtp.example.com"; int port = 587; // 创建邮件会话 Properties props = new Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.host", host); props.put("mail.smtp.port", port); Session session = Session.getInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(senderEmail, senderPassword); } }); try { // 创建邮件消息 Message message = new MimeMessage(session); message.setFrom(new InternetAddress(senderEmail)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient)); message.setSubject(subject); // 添加邮件正文 BodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText(body); // 添加附件 BodyPart attachmentBodyPart = new MimeBodyPart(); attachmentBodyPart.attachFile(attachmentPath); // 组装邮件内容 Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); multipart.addBodyPart(attachmentBodyPart); message.setContent(multipart); // 发送邮件 Transport.send(message); } catch (MessagingException | IOException e) { e.printStackTrace(); } } } ``` 你可以根据需要调用这两个类中的方法来实现导出Excel表格并发送到指定邮箱。记得替换示例代码中的邮箱地址、密码、服务器信息等为你自己的配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值