SpringBoot实现定时发送邮件功能

前言

本文主要实现以下功能:

  • SpringBoot整合邮件发送,实现html格式邮件的发送功能
  • SpringBoot配置Scheduled,开启定时任务功能

一、项目环境搭建

1.1 引入邮件发送依赖

创建一个SpringBoot项目,根据SpringBoot版本(此处我的版本是2.7.7),在Maven官网搜索与SpringBoot整合邮件发送的依赖包
在这里插入图片描述
在这里插入图片描述
复制该依赖放入pom.xml文件内的<dependencies>标签中

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    <version>2.7.7</version>
</dependency>

1.2 配置邮箱信息

以QQ邮箱为例,登录QQ邮箱官网,在设置中开启POP3/SMTP服务,保存授权码作为发送邮件时的密码
在这里插入图片描述
application.properties配置文件添加以下配置

server.port=8888
mail.port=25
mail.host=smtp.qq.com
mail.username=你的邮箱账号
mail.password=刚刚复制的授权码
# 设置每一分钟执行一次,可在浏览器中搜索corn表达式的具体使用方法
mail.cron=0 0/1 * * * ?

二、编写后台代码

2.1 开启定时任务

在主启动类上添加注解@EnableScheduling,开启定时任务功能

package com.example.springbootdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@EnableScheduling
@SpringBootApplication
public class SpringbootDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootDemoApplication.class, args);
    }

}

2.2 定义邮件发送配置类

在主启动类同级目录下,新建config目录,并在该目录下新建MailConfig配置类,配置邮件发送类的基本信息

package com.example.springbootdemo.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSenderImpl;

@Configuration
public class MailConfig {

    @Value("${mail.host}")
    private String host;
    @Value("${mail.username}")
    private String username;
    @Value("${mail.port}")
    private int port;
    @Value("${mail.password}")
    private String password;

    @Bean
    public JavaMailSenderImpl javaMailSender() {
        JavaMailSenderImpl sender = new JavaMailSenderImpl();
        sender.setPort(port);
        sender.setHost(host);
        sender.setUsername(username);
        sender.setPassword(password);
        return sender;
    }
}

2.3 定时任务发送邮件功能实现

在主启动类同级目录下,新建domain目录,并在该目录下新建Content实体类,后续创建该对象依次存入邮件内容中。

package com.example.springbootdemo.domain;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class Content {
    private String name;
    private String sex;
    private String hobby;
}

在主启动类同级目录下,新建schedule目录,并在该目录下新建MailSendSchedule实体类,添加注解@Component,在该类下实现定时任务发送html格式邮件功能。

package com.example.springbootdemo.schedule;

import com.example.springbootdemo.domain.Content;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Slf4j
@Component
public class MailSendSchedule {

    @Autowired
    private JavaMailSenderImpl mailSender;

    @Scheduled(cron = "${mail.cron}")
    public void sendMail(){
        log.info("-------------->进入邮件定时发送任务");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH时");
        List<Content> infoList = new ArrayList<>();
        infoList.add(new Content("小兰","女","听音乐"));
        infoList.add(new Content("小明","男","打篮球"));

        // TODO 需要自己后续配置邮件内容、收件人、抄送人等信息
        String text = getText(infoList);
        String[] receiver = {};
        String[] cc = {};

        // 发送html格式邮件
        try {
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "utf-8");
            mimeMessageHelper.setFrom(mailSender.getUsername());
            String currentTime = sdf.format(new Date());
            mimeMessageHelper.setSubject(currentTime+"邮件发送测试");
            if (receiver.length == 0 || cc.length == 0) {
                throw new MessagingException("收件人或抄送人为空!!!");
            }
            mimeMessageHelper.setTo(receiver);
            mimeMessageHelper.setCc(cc);
            mimeMessageHelper.setText(text, true);
            mailSender.send(mimeMessage);
            log.info("-------------->邮件发送成功");
        } catch (MessagingException e) {
            e.printStackTrace();
            log.error("-------------->邮件发送失败!!!{}",e.toString());
        } finally {
            log.info("-------------->邮件定时发送任务结束");
        }
    }

    // 获取邮件内容
    private String getText(List<Content> infoList){
        StringBuilder message = new StringBuilder();
        message.append("<table border=\"1\" cellpadding=\"1\"; cellspacing=\"1\">");
        message.append("<tr>");
        message.append("<td style='background-color:blue'>姓名</td>");
        message.append("<td style='background-color:blue'>性别</td>");
        message.append("<td style='background-color:blue'>爱好</td>");
        message.append("</tr>");
        infoList.stream().forEach((content)->{
            message.append("<tr>");
            message.append("<td>"+content.getName()+"</td>");
            message.append("<td>"+content.getSex()+"</td>");
            message.append("<td>"+content.getHobby()+"</td>");
            log.info(content.getName()+"+"+content.getSex()+"+"+content.getHobby());
            message.append("</tr>");
        });
        message.append("</table>");
        return message.toString();
    }
}

三、结果展示

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot提供了一个简单而强大的方式来定时发送邮件。下面是使用Spring Boot定时发送邮件的步骤: 1. 添加依赖:在`pom.xml`文件中添加Spring Boot的邮件依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` 2. 配置邮件信息:在`application.properties`或`application.yml`文件中配置邮件服务器的相关信息,例如: ```properties spring.mail.host=smtp.example.com spring.mail.port=587 spring.mail.username=your-email@example.com spring.mail.password=your-email-password spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true ``` 3. 创建邮件服务类:创建一个邮件服务类,用于发送邮件。可以使用Spring Boot提供的`JavaMailSender`接口来发送邮件。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Service; @Service public class EmailService { @Autowired private JavaMailSender mailSender; public void sendEmail(String to, String subject, String text) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(to); message.setSubject(subject); message.setText(text); mailSender.send(message); } } ``` 4. 创建定时任务类:创建一个定时任务类,用于定时发送邮件。可以使用Spring Boot提供的`@Scheduled`注解来定义定时任务的执行时间。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class EmailScheduler { @Autowired private EmailService emailService; @Scheduled(cron = "0 0 8 * * ?") // 每天早上8点执行 public void sendDailyEmail() { String to = "recipient@example.com"; String subject = "Daily Report"; String text = "This is the daily report email."; emailService.sendEmail(to, subject, text); } } ``` 5. 启动应用程序:运行Spring Boot应用程序,定时任务将在指定的时间自动执行,并发送邮件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值