特别说明:邮件所采用的均为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的定时发送邮件。







![【QA】[vue/element-ui] 日期输入框的表单验证问题](https://img-blog.csdnimg.cn/272b25f10c0d45ff90af194c61ce655f.png)









![P1307 [NOIP2011 普及组] 数字反转](https://img-blog.csdnimg.cn/005fa6e676344e7385e7ea0b184658b0.png)

