Java实现定时发送邮件

特别说明:邮件所采用的均为QQ邮件

一、邮箱准备

作为发送方,需要开启相关服务。
首先打开邮箱,然后选择设置,再选择账户
在这里插入图片描述
开启以下服务
在这里插入图片描述
我们可以在这里获取邮箱的授权码。
在这里插入图片描述

二、项目准备

2.1、依赖引入

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
<!--        引入mail依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
    </dependencies>

2.2、邮箱属性配置

#邮箱的配置
spring:
  mail:
    host: smtp.qq.com #发送邮件服务器
    username: 3077****02@qq.com #QQ邮箱
    password: xdanv*********hc #客户端授权码
    protocol: smtp #发送邮件协议
    properties.mail.smtp.port: 587 #端口号465或587
    default-encoding: utf-8

三、项目测试

3.1、 简易测试

	@Autowired
    private JavaMailSender javaMailSender;

    /**
     * 简单的测试
     */
    @GetMapping("/send")
    public void sendMail() {
        long startTime = System.currentTimeMillis();
        //初始化邮件对象
        SimpleMailMessage mail = new SimpleMailMessage();
        //主题
        mail.setSubject("测试主题");
        //文本
        mail.setText("Hello World");
        //发送人
        mail.setFrom("Mianded<307****02@qq.com>");
        //接受人
        mail.setTo("mianded@qq.com");
        javaMailSender.send(mail);
        long endTime = System.currentTimeMillis();
        long mill = (endTime - startTime) / 1000;
        System.out.println("发送邮件耗时:" + mill + ":秒");
    }

3.2、附带有文件的发送测试

/**
     * 带有文件的传输
     */
    @GetMapping("/sendMails")
    public void sendMails() {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        try {
            //组装复杂邮件
            MimeMessageHelper mimeHelper = new MimeMessageHelper(mimeMessage, true);
            mimeHelper.setTo("mianded@qq.com");
            mimeHelper.setFrom("Mianded<307*****2@qq.com>");
            //标题
            mimeHelper.setSubject("文件传输测试");
            //正文
            mimeHelper.setText("正文测试");
            //附件
            File file = new File("D:\\user.sql");
            mimeHelper.addAttachment("SQL", file);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        javaMailSender.send(mimeMessage);
    }

3.3 定时发送

定时发送是基于Spring Task完成的
我们可以在Springboot中使用注解的方式,来实现定时发送。

特别注意:我们需要在启动类上添加以下注解
即:@EnableScheduling

@SpringBootApplication
@EnableScheduling
public class MailApplication {
    public static void main(String[] args) {
        SpringApplication.run(MailApplication.class, args);
    }
}

我们需要使用Cron表达式
CRON表达式是一个字符串,包含五个到七个由空格分隔的字段(每种软件不一样),表示一组时间,通常作为执行某个程序的时间表。

这是一个Cron的在线工具,如果有需要可以看一下

@Slf4j
@Component
public class MailTask {

    @Autowired
    JavaMailSender javaMailSender;
    @Scheduled(cron = "0 45 14 ? * SUN-SAT")
    public void scheduled() {
        long startTime = System.currentTimeMillis();
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        try {
            //组装复杂邮件
            MimeMessageHelper mimeHelper = new MimeMessageHelper(mimeMessage, true);
            mimeHelper.setTo("mianded@qq.com");
            mimeHelper.setFrom("Mianded<30*****2@qq.com>");
            //标题
            mimeHelper.setSubject("文件传输测试");
            //正文
            mimeHelper.setText("正文测试");
            //附件
            File file = new File("D:\\user.sql");
            mimeHelper.addAttachment("SQL", file);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        javaMailSender.send(mimeMessage);
        long endTime = System.currentTimeMillis();
        long mill = (endTime - startTime) / 1000;
        System.out.println("发送邮件耗时:" + mill + ":秒");
    }
}

上面的Cron表达式: "0 45 14 ? * SUN-SAT"指的就是,从周日到周六,每天的14:45 。

这样就可以实现Java的定时发送邮件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值