Java使用阿里邮箱生成excle邮件附件发送

这篇博客详细介绍了如何使用Java在Springboot框架下,结合阿里邮箱服务,实现每周二10点自动发送包含过去一周律师信息的Excel附件。文章涉及到定时任务、分布式锁、POI库生成Excel以及邮件发送的注意事项,包括防止重复跑批、设置邮件附件标题及调整列宽等。
摘要由CSDN通过智能技术生成

需求背景

  • 日常工作中,对于一个码农来说,熟练使用框架之外,还需要灵活使用各类工具类,类似于导入导出,上传下载,邮件短信,语音视频等常用功能也是非常常见的需求,网上搜索的相关资料也是非常的多,今天就描述一个需求的场景,难度不是太难,只是需要注意的小细节还是挺多的,故借此契机,二狗在此将我个人实现的过程全程记录下来,希望有类似需求的朋友可以参考,但是话说到底,编程这个东西可以看,可以摘录,可以背诵,但是只有自己手敲出来的才是自己的,希望二狗的文章可以帮助更多的朋友把时间花在研究技术原理以及各类底层实现的设计艺术上,而对于业务类的需求,永远千变万化,只需要理解清楚,想顺畅了,就可以动手开干~以上一些个人理解,如有

实现功能:

  • 每周二上午10点,以当天时间为参照时间节点,到当天之前的一周内的这个时间段,把后台的律师信息表中的律师信息,进行汇总,然后通过excel附件的形式,使用阿里邮箱发送到市场运营人员的邮箱;

需求分析:

  1. 每周二上午10点–定时任务解决(需要注意线上多台服务器跑批,执行定时任务需要添加分布锁,避免重复跑批)
  2. 时间段为:(当天-当天前一周]
  3. 通过Excel 附件形式,考虑使用POI生成Excel模板文件,后端读取数据进行填充
  4. 使用阿里邮箱,需要准备好连接邮箱的Host,端口,协议等参数,数据上准备好收件人邮箱账号+发件人邮箱账号,密码

项目技术架构选型描述

  • 本项目使用的是Springboot框架,一些固定参数,比如邮箱的Host,端口,协议等参数,数据上准备好收件人邮箱账号发件人邮箱账号,密码等均参数化的配置在boot框架的yml配置文件中
  • 定时任务使用注解@Scheduled(cron="")方式进行跑批,当然启动类Application类需要添加@EnableScheduling 注解以便于执行定是脚本,在此不再赘述,因为不是本文探讨的重点;
  • 本本文描述的代码基于Idea+ jdk1.8+ 数据库mysql+ Mybatis+ Gradle导包+ Redis缓存

代码过程展示
1、build.gradle 文件 的dependencies { }中先导包,如果你使用的是Maven原理也是一样,可以去 Maven中央仓库搜索你想要的包的版本的Maven写法,在此就不再赘述

//poi
	implementation('org.apache.poi:poi:3.16')
	implementation('org.apache.poi:poi-ooxml:3.14')
	implementation('org.apache.poi:poi-scratchpad:3.15')
	//email
	implementation('org.springframework:spring-context-support')
	implementation('javax.mail:javax.mail-api:1.5.1')
	implementation('com.sun.mail:javax.mail:1.5.4')

2、yml文件内配置邮箱相关参数

email:
  host: smtpdm.aliyun.com
  port: 80
  senderMail: autoAdmin@wahaha.cn
  senderPassword: Wahaha2019
  sendTo: autoMarketOne@wahahatech.com,autoMarketSecond@wahahatech.com

3、律师信息实体类–使用的Lombok插件通过@Data生成setter 和getter

@Data
public class LawyerAuthenticate {

    /**
     * 主键
     * */
    private Long id;
    /**
     * 律师姓名
     * */
    private String  lawName;
    /**
     * 所属律所
     * */
    private String lawFirm;
    /**
     * 律师手机号
     * */
    private String phone;
    /**
     * 律师常用邮箱
     * */
    private String  mail;
    /**
     * 律师执业证号
     * */
    private String licenseNumber;
    /**
     * 律师执业证照片名字
     * */
    private String  licenseName;
    /**
     * 律师执业证照片url
     * */
    private String licenseUrl;
    /**
     * 身份证照片名字
     * */
    private String idcardName;
    /**
     * 身份证照片url
     * */
    private String idcardUrl;
    /**
     * 创建日期
     * */
    private Date createDate;
    /**
     * 起始时间--不存库
     * */
    private Date startTime;
    /**
     * 截止时间--不存库
     * */
    private Date endTime;
    }

4、日期工具类–在本功能内仅仅用到了:nextDay(int num) 这个方法&#x

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以提供一些基本的步骤: 1. 在Java使用Apache POI库创建Excel文件 2. 使用JavaMail API连接邮箱服务器并创建邮件 3. 将Excel文件作为附件添加到邮件中 4. 设置邮件主题、内容、接收人等信息 5. 发送邮件 以下是一些参考代码: ```java // 1. 创建Excel文件 Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); Row row = sheet.createRow(0); row.createCell(0).setCellValue("Hello"); row.createCell(1).setCellValue("World"); FileOutputStream outputStream = new FileOutputStream("example.xlsx"); workbook.write(outputStream); outputStream.close(); // 2. 创建邮件 Properties props = new Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.host", "smtp.gmail.com"); // 邮箱服务器 props.put("mail.smtp.port", "587"); // 邮箱SMTP端口 Session session = Session.getInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("your-email-address", "your-email-password"); } }); Message message = new MimeMessage(session); message.setFrom(new InternetAddress("your-email-address")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient-email-address")); message.setSubject("Test Email"); // 3. 添加附件 MimeBodyPart attachmentPart = new MimeBodyPart(); attachmentPart.attachFile(new File("example.xlsx")); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(attachmentPart); // 4. 设置邮件内容、附件等信息 MimeBodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setContent("This is a test message", "text/html"); multipart.addBodyPart(messageBodyPart); message.setContent(multipart); // 5. 发送邮件 Transport.send(message); ``` 提醒一下,以上示例代码仅供参考,需要自己根据具体情况进行适当的修改和调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值